AT90S1200 ATmega8 ?
, - .
- .
ftp://ftp.radio.ru/pub/2006/06/sintez10.zip
...
:; LM7001 ; 1.8...16 50 . ; 25.11.2005 .include "1200def.inc" .def hertzif = r1 .def per_delta = r2 .def pered_l = r3 .def pered_h = r4 .def worktx_l = r5 .def worktx_h = r6 .def delta_tx = r7 .def flag_reg = r8 .def if_l = r9 .def if_h= r10 .def number = r11 .def ind_l = r12 .def ind_m = r13 .def ind_h = r14 .def delta = r15 .def fl_l = r16 .def fl_h =r17 .def work_l =r18 .def work_h =r19 .def temp =r20 .def temp1 =r21 .def valc = r22 .def loop = r23 .def hertz = r24 .def mult_l =r25 .def mult_m = r26 .def mult_h = r27 .def fm_h = r28 .def fm_l = r29 .def temp16_l = r30 .def temp16_h = r31 .equ flag_sp = 0 .equ zero = 3 .equ plus = 2 .equ one = 1 .equ min = 0 .equ att_sav = 7 ;PORTb .equ DAC1 =0 ;out .equ DAC2 =1;out .equ DAC3 =2;out .equ DAC4 =3;out .equ RIT =4;in .equ speed =5;in .equ SK =6;out .equ DI =7;out ;.equ TX =6 ; TX input, in ;PORTD .equ UP =0;in .equ DN =1;in .equ DATA = 2 ;out .equ CL =3;out .equ CE =4;out .equ plusfc =5; + - , "0" - , "1" - .equ DAC0 =6;out .cseg .org 0 ;**************************************************** ;*************** ******************** ;*************************************************** ldi temp, 0b00110000 out PORTB, temp ldi temp, 0b11001111 out DDRB, temp ; ldi temp, 0b10100011 out PORTD, temp ldi temp, 0b01011100 out DDRD, temp ; clr delta; ;*************************************************************** ;******** *********** ;*************************************************************** cold_start:ldi temp, 0x50 rcall pause_ro ;************************************************************** ;******** *********************************** ;************************************************************** ldi valc, 0x01 clr number clr delta ;************************************************ ; ;************************************************ sbic PINB, RIT rjmp hot_start ritotp1:ldi temp, 0x02 ; rcall pause_ro sbis PINB, RIT ; , rjmp ritotp1 ldi temp, 0xF0 ; "-" mov number, temp ldi temp, if_hz rcall EERead mov hertzif, temp ldi temp,if_freq ; rcall EERead mov work_h, temp ldi temp, if_freq +1 rcall EERead mov work_l, temp initial1:rcall display ;*************************************** ;*** ********************** ;************************************* bigloop1: sbis PINB, RIT ; rjmp savdata ; sbic PIND,UP rjmp up_ust1 sbic PIND,DN rjmp dn_ust1 sbrc valc, zero rjmp bigloop1 sbrc valc, min rjmp rout11 sbrc valc, plus rjmp rout21 rjmp bigloop1 ;*** ************************ up_ust1:sbic PIND,DN rjmp dbl_one1 ; , up=1, dn=0 sbrc valc,plus rjmp bigloop1 ; ? sbrs valc,zero; rjmp nxt_val1 ldi valc, 0b00000100 rcall add_one ; 1 rjmp initial1 nxt_val1:sbrs valc, one ; 1 rjmp bigloop1 ldi valc,0b000000100 rcall sub_one ; 1 rjmp initial1 dbl_one1:sbrc valc,one ; =0, rjmp bigloop1 ; sbrs valc,plus;, rjmp nxt_val21 ; +1, ldi valc, 0b00000010 ; rcall add_one rjmp initial1 nxt_val21:sbrs valc,min rjmp bigloop1 ldi valc, 0b00000010 rcall sub_one rjmp initial1 rout11:ldi valc,0b00001000 rcall add_one rjmp initial1 rout21: ldi valc,0b00001000 rcall sub_one rjmp initial1 dn_ust1:sbrc valc, min rjmp bigloop1 sbrc valc, zero rjmp rout31 sbrc valc, one rjmp rout41 rjmp bigloop1 rout31: ldi valc,0b00000001 rcall sub_one rjmp initial1 rout41: ldi valc,0b00000001 rcall add_one rjmp initial1 ;*********************************************** ; ;*********************************************** savdata:ldi temp, if_freq mov temp1, work_h rcall EEwrite ldi temp,if_freq+1 mov temp1, work_l rcall EEwrite sbis PINB, RIT ldi temp, if_hz mov temp1, hertzif ritotp2:ldi temp, 0x02 ; rcall pause_ro sbis PINB, RIT ; , rjmp ritotp2 ser temp rcall vyvdig rcall vyvdig ser temp rcall vyvdig rcall vyvdig ser temp rcall vyvdig rcall vyvdig ser temp rcall vyvdig rcall vyvdig ser temp rcall vyvdig rcall vyvdig rjmp cold_start ;************************** ; ;************************** hot_start:ldi temp, fmin ; rcall EERead mov fl_h, temp ldi temp, fmin + 1 rcall EERead mov fl_l, temp ldi temp, fmax ; rcall EERead mov fm_h, temp ldi temp, fmax + 1 rcall EERead mov fm_l, temp ldi temp, if_freq ; rcall EERead mov if_h, temp ldi temp, if_freq + 1 rcall EERead mov if_l, temp ldi temp, if_hz rcall EERead mov hertzif, temp ldi temp,ch1 ; rcall EERead mov work_h, temp mov worktx_h, work_h ldi temp, ch1 +1 rcall EERead mov work_l, temp mov worktx_l, work_l initial: rcall display rcall syntez ;*************************************** ;*** ********************** ;************************************* bigloop: sbic PINB, RIT ; RIT rjmp no_rit ; sbic PINB, speed ; , speed rjmp rit_rout; RIT- rjmp tx_rout ; - no_rit:sbic PIND,UP rjmp up_ust sbic PIND,DN rjmp dn_ust sbrc valc, zero rjmp bigloop sbrc valc, min rjmp rout1 sbrc valc, plus rjmp rout2 rjmp bigloop ;*** ************************ up_ust:sbic PIND,DN rjmp dbl_one ; , up=1, dn=0 sbrc valc,plus rjmp bigloop ; ? sbrs valc,zero; rjmp nxt_val ldi valc, 0b00000100 rcall add_one ; 1 rjmp initial nxt_val:sbrs valc, one ; 1 rjmp bigloop ldi valc,0b000000100 rcall sub_one ; 1 rjmp initial dbl_one:sbrc valc,one ; =0, rjmp bigloop ; sbrs valc,plus;, rjmp nxt_val2 ; +1, ldi valc, 0b00000010 ; rcall add_one rjmp initial nxt_val2:sbrs valc,min rjmp bigloop ldi valc, 0b00000010 rcall sub_one rjmp initial rout1:ldi valc,0b00001000 rcall add_one rjmp initial rout2: ldi valc,0b00001000 rcall sub_one rjmp initial dn_ust:sbrc valc, min rjmp bigloop sbrc valc, zero rjmp rout3 sbrc valc, one rjmp rout4 rjmp bigloop rout3: ldi valc,0b00000001 rcall sub_one rjmp initial rout4: ldi valc,0b00000001 rcall add_one rjmp initial ;**************** ********************* add_one: sbis PINB,speed rjmp step_up inc delta ldi temp,0x14 cp delta, temp brne end_add clr delta step_up: clr temp clc ldi temp, 0x01 add work_l, temp ; 1 clr temp adc work_h, temp ; , 1 cp fm_h, work_h ; ? brne out_add ; - cp fm_l, work_l ; , brsh out_add mov work_h, fl_h ; - . mov work_l, fl_l ; end_add:sbrc flag_reg, flag_sp ret mov delta_tx, delta ; , mov worktx_h, work_h; mov worktx_l, work_l out_add:ret ;************ ***************************** sub_one: sbis PINB, speed rjmp step_dn dec delta ser temp cp delta, temp brne end_sub ldi temp,0x13 mov delta, temp step_dn:clr temp clc subi work_l, 0x01 ; 1 sbc work_h, temp ; , cp work_h, fl_h ; ? brne out_sub ; cp work_l, fl_l ; ? brsh out_sub ; mov work_h, fm_h ; , mov work_l, fm_l ; end_sub:sbrc flag_reg, flag_sp ret mov delta_tx, delta mov worktx_h, work_h mov worktx_l, work_l out_sub:ret ;********************************************** ;************************************** ;********************************************** tx_rout:mov pered_l, work_l ; mov pered_h, work_h ; mov work_l, worktx_l ; mov work_h, worktx_h mov per_delta, delta mov delta, delta_tx ldi temp, 0xB0 ; "" mov number, temp rcall display rcall syntez tx_ret: ldi temp, 0x01 ; rcall pause_ro sbis PINB, speed ; sbic PINB, RIT rjmp end_tx ; rjmp tx_ret ; end_tx: mov worktx_l, work_l ; mov worktx_h, work_h ; mov work_l, pered_l ; mov work_h, pered_h mov delta_tx, delta mov delta, per_delta sbrs flag_reg, flag_sp ; rjmp del_num ldi temp, 0xE0 ; , "" mov number, temp rjmp initial del_num:clr number ; - rjmp initial ;*********************************************** ;************************************* ;*********************************************** rit_rout: ldi temp, 0x02 ; rcall pause_ro sbis PINB, RIT ; , rjmp rit_rout mov temp, flag_reg sbrc temp, flag_sp ; , rjmp res_rit ; sbr temp, 0x01 ; , ldi temp1, 0xE0 mov number, temp1 ; "" rjmp end_rit res_rit:cbr temp, 0x01 ; clr number ; "" mov delta, delta_tx ; mov work_h, worktx_h mov work_l, worktx_l end_rit:mov flag_reg, temp rjmp initial ;********************************************** ;****** ****************** ;********************************************* ;************ 16- ************** display: mov mult_l, work_l mov mult_m, work_h ldi temp16_l, 0x10 ; ldi temp16_h, 0x27 rcall decdig mov ind_h, temp add ind_h, number ; ldi temp16_l, 0xE8 ; ldi temp16_h, 0x03 rcall decdig cpi temp, 0x00 brne nextdig2 ldi temp, 0x0A nextdig2:mov ind_m, temp swap ind_m ldi temp16_l, 0x64 ; clr temp16_h rcall decdig cpi temp, 0x00 brne nextdig3 ldi temp, 0x0A nextdig3:add ind_m, temp ldi temp16_l, 0x0A ; clr temp16_h rcall decdig cpi temp, 0x00 brne nextdig4 ldi temp, 0x0A nextdig4:mov ind_l, temp ; swap ind_l ; cpi mult_l,0x00 ; - . brne enddig ldi mult_l,0x0A enddig:add ind_l, mult_l ; mov hertz, delta ; 2 ror hertz brcc zero_hz ; , ldi temp, 0x05 ; - 5 rjmp next5 zero_hz: ldi temp,0x0A ; "" next5: cpi hertz, 0x00 ; = 0, brne next3 ldi hertz, 0x0A next3:swap hertz add hertz, temp ;******************** ************************* mov temp, ind_h rcall vyvdig rcall vyvdig mov temp, ind_m rcall vyvdig mov ind_m, temp ldi temp, 0xF0 rcall vyvdig mov temp, ind_m rcall vyvdig mov temp, ind_l rcall vyvdig rcall vyvdig ldi temp, 0xF0 rcall vyvdig mov temp, hertz rcall vyvdig rcall vyvdig ;**************************** ;*** ************ ;**************************** ldi temp, 0x0A add delta, temp sbrc delta, 0 rjmp hi0 cbi PORTD, DAC0 rjmp next11 hi0:sbi PORTD, DAC0 next11:sbrc delta, 1 rjmp hi1 cbi PORTB, DAC1 rjmp next12 hi1:sbi PORTB, DAC1 next12:sbrc delta,2 rjmp hi2 cbi PORTB, DAC2 rjmp next13 hi2:sbi PORTB, DAC2 next13:sbrc delta, 3 rjmp hi3 cbi PORTB, DAC3 rjmp next14 hi3:sbi PORTB, DAC3 next14:sbrc delta,4 rjmp hi4 cbi PORTB, DAC4 rjmp enddac hi4:sbi PORTB, DAC4 enddac:sub delta, temp ret ;***** ****************** ;B0=0, B1=0, B2=0, tb=0, R0=1, R1=1, R2=0, S=1 syntez: mov temp16_l, work_l ; - mov temp16_h, work_h sbis PINB, plusfc rjmp minus_fc add temp16_l,if_l ; adc temp16_h,if_h rjmp end_fc minus_fc:sub delta, hertzif sub temp16_l, if_l sbc temp16_h, if_h ;****** ******** end_fc:cbi PORTD,DATA sbi PORTD,CE ldi loop, 0x08 mov temp,temp16_l loop2:ror temp brcs h_l cbi PORTD, DATA rjmp sync h_l:sbi PORTD, DATA sync:rcall pulse dec loop brne loop2 ldi loop, 0x08 mov temp, temp16_h loop3:ror temp brcs h_l1 cbi PORTD, DATA rjmp sync1 h_l1:sbi PORTD, DATA sync1:rcall pulse dec loop brne loop3 ldi loop, 0x08 ldi temp, 0B10110000 loop4:ror temp brcs h_l2 cbi PORTD, DATA rjmp sync2 h_l2:sbi PORTD, DATA sync2:rcall pulse dec loop brne loop4 cbi PORTD, DATA ;CE cbi PORTD, CE ret ;*** *** vyvdig: ldi loop,0x04 byte_c:rol temp brcs h_level cbi PORTB,DI rjmp synhro h_level:sbi PORTB,DI synhro:sbi PORTB,SK rcall long cbi PORTB,SK rcall long dec loop brne byte_c rcall long cbi PORTB, DI ret ;************************* ; ;************************** EEwrite: sbic EECR, EEWE rjmp EEwrite out EEAR, temp out EEDR, temp1 sbi EECR, EEWE ret ;*********************** ; ;*********************** EEread: sbic EECR,EEWE rjmp EERead out EEAR,temp sbi EECR,EERE in temp,EEDR ret ;********************* ; ;********************* pause_ro: ser temp1 retu1:ser loop retu2:dec loop brne retu2 dec temp1 brne retu1 dec temp brne pause_ro ret long: ldi temp1, 0x02 retlong:dec temp1 brne retlong ret ;********************************************** ; - ;********************************************** decdig:ldi temp,-1 minus:sub mult_l, temp16_l sbc mult_m, temp16_h inc temp brsh minus add mult_l, temp16_l adc mult_m, temp16_h ret ;********************* ; ;********************* pulse: sbi PORTD, CL ldi temp1,0x1F zad1:dec temp1 brne zad1 cbi PORTD, CL ldi temp1,0x1F zad2:dec temp1 brne zad2 ret .eseg .org 0 fmin: .db 0x07, 0x12 ; 1810 fmax: .db 0x07, 0xCF ; 2000 ch1: .db 0x07, 0x6C ; - - 1900 if_freq: .db 0x22, 0x9E ; - - 8862 if_hz: .db 0x00 ; - - , . 50 ; 50/ .db "(c)Temerev25_11_2005"
- , .
, 8
.
: 1 (: 0 , : 1)