LIST P=16f84, E=2 __CONFIG 03FF1 ; КВАРЦ-3FF1 RC-3FF3 генератор #define bank0 bcf status,5 ;выбрать Bank 0 #define bank1 bsf status,5 ;выбрать bank 1 ORG 0000H goto init prer org 4 btfsc intcon,2 goto _end ;пеpеполн таймеp movlw 0 movwf rez1 movwf rez2 movwf cou1 movwf cou2 movwf cou3 incf cou1,f movwf _a movwf _b movwf _t movwf _t1 movwf _e movlw buff movwf ukaz movlw 0a0 movwf intcon call in3 movwf _a w1 call in movwf _b movf _a,w subwf _b,w ;b-a bz w7 movwf _t bnc w4 movf _a,w subwf _t,w ;w-a movwf _t1 bnc w2 movf _a,w subwf _t1,w ;w-a bnc w3 movlw 2 goto eror w2 rlf _t,f ;rlf w movf _a,w subwf _t,w ;w-a bnc w7 w3 bcf status,0 rlf rez1,f rlf rez2,f incf cou2,f decfsz cou1,f goto w3 bsf status,0 rlf rez1,f rlf rez2,f incf cou2,f w8 bcf status,0 rrf _b,w bcf status,0 addwf _a,f rrf _a,f goto w9 w4 movf _b,w subwf _a,w ;a-b movwf _t movf _b,w subwf _t,w ;w-b bnc w6 movwf _t movf _b,w subwf _t,w ;w-b movlw 3 bc eror w5 bsf status,0 rlf rez1,f rlf rez2,f incf cou2,f decfsz cou1,f goto w5 bcf status,0 rlf rez1,f rlf rez2,f incf cou2,f rrf _a,w bcf status,0 addwf _b,f rrf _b,w movwf _a w9 movlw 9 subwf cou2,w bc w14 ;пpинят один символ w9x call in movwf _b movf _a,w subwf _b,w ;b-a bz w13 movwf _t bnc w10 movf _a,w subwf _t,w ;w-a bnc w11 movwf _t1 movf _a,w subwf _t1,w ;w-a bnc w12 movlw 4 goto eror w11 rlf _t,f ;rlf w movf _a,w subwf _t,w ;w-a bnc w13 w12 bsf status,0 rlf rez1,f rlf rez2,f incf cou2,f goto w8 w10 movf _b,w subwf _a,w ;a-b movwf _t ; rlf _t,f movf _b,w subwf _t,w ;w-b bnc w13 movlw 5 goto eror w13 bcf status,0 rlf rez1,f rlf rez2,f incf cou2,f goto w9 w6 bcf status,0 rlf _t,f movf _b,w subwf _t,w ;w-b bc w5 w7 movf _b,w addwf _a,f rrf _a,f incf cou1,f goto w1 w14 incf cou3,f clrf cou2 movlw 1 subwf rez2,w bz w15 movlw 0 subwf rez2,w bnz w16 movlw 25 subwf rez1,w movlw 37 bz w17 movlw 31 subwf rez1,w movlw 34 bz w17 movlw 34 subwf rez1,w movlw 30 bz w17 movlw 61 subwf rez1,w movlw 32 bz w17 movlw 64 subwf rez1,w movlw 39 bz w17 movlw 70 subwf rez1,w movlw 36 bz w17 w16 movlw 6 goto eror w15 movlw 21 subwf rez1,w movlw 31 bz w17 movlw 24 subwf rez1,w movlw 38 bz w17 movlw 30 subwf rez1,w movlw 35 bz w17 movlw 60 subwf rez1,w movlw 33 bnz w16 w17 movwf _t movf ukaz,w movwf fcr sublw 2f bnc w17x ;buff full movf _t,w movwf ind incf ukaz,f w17x clrf rez1 clrf rez2 call in goto w9x in btfss prizn,0 goto in3 in2 btfsc portb,4 ;ожд 0 goto in2 bcf prizn,0 goto in4 in3 btfss portb,4 ;ожд 1 goto in3 bsf prizn,0 in4 movf tmr,w clrf tmr return init bank1 movlw 85 ;было 87 movwf opt bank0 movlw 10 tris portb movlw 0 tris porta movwf portb call zwuk1 init2 clrf _t2 init3 btfss portb,4 goto init4 decf _t,f bnz init3 decf _t1,f bnz init3 decf _t2,f bnz init3 call zwuk1 movlw 20 movwf portb sleep init4 clrf tmr movlw 88 movwf intcon goto prer _end movlw 1 eror movwf _e bcf intcon,7 movlw 0 ;18 movwf fcr movlw 0 movwf tmp_ea movlw 2f movwf tmp e1 movf tmp_ea,w movwf eeadr movf ind,w movwf eedata call ee_wr incf tmp_ea,f incf fcr,f decf tmp,f bnz e1 movf cou3,w ;если счетчик =0 то обход iorlw 0 bz e2 movlw buff movwf fcr e3 movf ind,w call send incf fcr,f decfsz cou3,f goto e3 e4 movlw 1 subwf _e,w bnz e6 ;error e5 movlw 0a call send movlw 0d call send call zwuk1 e2 goto init2 e6 movlw 20 call send movlw 65 call send movlw 72 call send movlw 72 call send movlw 6f call send movlw 72 call send movlw 20 call send movlw 30 iorwf _e,w call send movlw 090 movwf _t2 call zwuk movlw 080 movwf _t2 call zwuk goto e5 zwuk1 movlw 0a0 movwf _t2 zwuk movlw 0 movwf _t z0 movf _t2,w movwf _t1 z1 decf _t1,f bnz z1 movlw 1 andwf _t,w bz z2 movlw 8 movwf portb goto z3 z2 movlw 4 movwf portb z3 decf _t,f bnz z0 return ee_wr bank1 ; Зап байт из EEDATA в EEPROM по адресу в EEADR. Прер должн.запрещены перед вызовом ee_wr. bsf EECON1^80,WREN ;разрешить запись в EEPROM movlw 55H movwf EECON2^80H movlw 0AAH movwf EECON2^80H bsf EECON1^80H,WR ;начать запись ee_wr1 btfsc EECON1^80H,WR ;запись завершена? goto ee_wr1 ;нет bcf EECON1^80H,WREN ;запретить запись в EEPROM bank0 return ee_rd bank1 ; Прочитать байт EEPROM из EEPROM по адресу EEADR в EEDATA bsf EECON1^80H,RD ;начать bank0 return ;при возвращении чтение должно быть завершено ;Subroutine---выдать байт из _t последовательно в RB5 send movwf _t movlw 8 movwf _t1 ;загрузить 9 в счетчик бит. movlw 2 movwf portb ; bsf portb,2 call zdr next rrf _t,f ;сдвиг _t влево (через Cary) bc next1 movlw 2 movwf portb ; bsf portb,2 goto next2 next1 movlw 0 movwf portb ; bcf portb,2 next2 call zdr decfsz _t1,1 ;проверить счетчик бит. goto next movlw 0 movwf portb ; bcf portb,2 call zdr call zdr return zdr movlw 1a ;19 -1b-rab ;17-19 16-pичное число, кваpц 3.52 movwf _t2 zdr1 decfsz _t2,f goto zdr1 return ind EQU 0 tmr EQU 1 pcl EQU 2 status EQU 3 fcr EQU 4 porta equ 5 portb equ 6 eedata equ 8 eeadr equ 9 intcon EQU 0BH opt equ 1 EECON1 equ 088H EECON2 equ 089H ;STATUS C EQU 0 DC EQU 1 Z EQU 2 PD EQU 3 TO EQU 4 RP0 EQU 5 ;bank N ;INTCON RTIF EQU 2 RTIE EQU 5 GIE EQU 7 ;OPTION PS0 EQU 0 ;delitel PS1 EQU 1 ;delitel PS2 EQU 2 ;delitel PSA EQU 3 ;delitel RB EQU 7 OPT EQU 1 WREN equ 2 WR equ 1 RD equ 0 cblock 0CH ;блок переменных tmp_ea tmp_ed prizn ;0bit -состояние b4 cou1 ;кол. пеpвых одинаковых бит cou2 ;кол пpинятых бит cou3 ;счетчик пpинятых байт _a _b _t _t1 _t2 rez2 rez1 tmp _e ukaz buff ;начало блока данных, ниже неpеменных не заводить endc end