⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 set_time.asm

📁 avr读写DS1302的程序和LCD的驱动!
💻 ASM
📖 第 1 页 / 共 4 页
字号:
          cp       lcdtab,tempc
		  brlo     disp3_1
		  clr      lcdtab
disp3_0:
		  sbi      portc,lcd_e
		  ret

disp3_1:  mov      lcdtab,tempc
		  sbi      portc,lcd_e
		  ret
;**************************************************	
lcdinit:
		  ldi      tempc,$03
		  rcall    lcdwr_com
          ldi      zh,$88
		  ldi      zl,$88
wait5ms_0: 
          wdr
		  sbiw     zl,$01
		  brne     wait5ms_0
		  ldi      tempc,$03
		  rcall    lcdwr_com
          ldi      zh,$20
		  ldi      zl,$88
wait100us:
          wdr
          sbiw     zl,$01
		  brne     wait100us          
		  ldi      tempc,$03
		  rcall    lcdwr_com
          ldi      tempc,$02
		  rcall    lcdwr_com

		  ldi      tempc,$02
		  rcall    lcdwr_com
		  ldi      tempc,$08
		  rcall    lcdwr_com
		  		  		   
          ldi      tempc,$00     ;clr disp
		  rcall    lcdwr_com
		  ldi      tempc,$01
		  rcall    lcdwr_com
          ldi      zh,$88
		  ldi      zl,$88
wait5ms_1: 
          wdr
		  sbiw     zl,$01
		  brne     wait5ms_1

		  ldi      tempc,$00
		  rcall    lcdwr_com
		  ldi      tempc,$06
		  rcall    lcdwr_com

		  ldi      tempc,$00
		  rcall    lcdwr_com
		  ldi      tempc,$0c
		  rcall    lcdwr_com 
		  ret 
;***************************************************          
lcdwr_com:
          out      portc,tempc
		  ldi      zh,$10
		  ldi      zl,$00
          sbi      portc,lcd_e
lcd_wait:        
          sbiw     zl,$01     ;20M 40us 
          brne     lcd_wait
		  cbi      portc,lcd_e
          ret
;***************************************************
rxint:
          in       regtemp,sreg
		  push     zl
		  push     zh
		  lds      rxtemp,ucsr0b
		  sbrs     rxtemp,rxb80
          rjmp     rx00
          ldi      zh,high(rx_tab)
		  ldi      zl,low(rx_tab)
		  add      zl,rxtab
		  adc      zh,clrtemp
		  ijmp
rx_tab:		       
		  rjmp     data00    
		  rjmp     data01
		  rjmp     data02
		  rjmp     data03
rx00:
          clr      rxtab
          lds      rxtemp,udr0
		  cpi      rxtemp,$aa
          brne     rxend
		  ldi      r24,low(srctemp)
		  ldi      r25,high(srctemp)
          clr      addsum
		  inc      rxtab
rxend:
data00:
          lds      rxtemp,udr0
rxend0:
		  pop      zh
		  pop      zl
    	  out      sreg,regtemp
          reti  
;***************************************************		           		   
data01: 
          clr      rxtab
          lds      rxtemp,udr0	 
		  cpi      rxtemp,$00
          brne     rxend0
		  ldi      rxtemp,$02
		  mov      rxtab,rxtemp
		  ldi      rxtemp,21
		  sts      rxincsram,rxtemp
		  rjmp     rxend0
;***************************************************		            
data02:
          lds      rxtemp,udr0	 
		  movw     zh:zl,r25:r24
          st       z+,rxtemp
		  add      addsum,rxtemp
		  movw     r25:r24,zh:zl
		  lds      rxtemp,rxincsram
		  dec      rxtemp
		  sts      rxincsram,rxtemp
		  brne     rxend0 
		  inc      rxtab    
          rjmp     rxend0
;***************************************************
data03:
          clr      rxtab
          lds      rxtemp,udr0	 
		  cp       rxtemp,addsum
		  brne     rxend0
		  sbr      buffbit,bit_4
		  rjmp     rxend0          
;**********************************************
key:
		  in       tempc,pind
		  andi     tempc,$f0
		  cpi      tempc,$f0
		  brne     keydn
		  clr      zl
		  ldi      zh,$10
		  sts      keydel0,zl
		  sts      keydel1,zh
		  cbr      keybit,bit_7
		  sbrs     keybit,bit6
		  ret      
		  cbr      keybit,bit_6
		  sbr      buffbit,bit_5
keyret:
		  ret      
keydn: 
		  lds      zh,keydel1
		  lds      zl,keydel0
		  sbiw     zl,$01
		  sts      keydel0,zl
		  sts      keydel1,zh
		  brne     keyret
		  ldi      zh,$40
		  sts      keydel0,zl
		  sts      keydel1,zh	                              
          cbr      keybit,0b00000111    
key1:          
          cpi      tempc,0b11100000
		  brne     key2
		  sbrc     keybit,bit7
          ret
		  sbr      keybit,bit_7
	      tst      keytab0
		  breq     keyno
		  dec      keytab0  
          sbr      keybit,keydn_bit  
          cbr      keybit,bit_5
		  cbr      keybit,bit_4
          ret
key2:		      
		  cpi      tempc,0b11010000
		  brne     key3
		  sbrc     keybit,bit7
          ret
		  sbr      keybit,bit_7
    	  sbr      keybit,kmode_bit
          sbr      keybit,keydn_bit  
		  ret     
key3:
		  cpi      tempc,0b10110000
		  brne     key4
		  sbrc     keybit,bit7
          ret
		  sbr      keybit,bit_7
          sbr      keybit,kset_bit
          sbr      keybit,keydn_bit  
		  ret
key4:
          cpi      tempc,0b01110000
		  brne     keyno
          cbr      keybit,bit_7      
          sbr      keybit,kadd_bit
          sbr      keybit,keydn_bit
keyno:      		  	          
          ret
;**************************************************
keypr:  
          sbrs    keybit,keydnbit
		  ret
          cbr     keybit,keydn_bit 
keypr_p: 		  		  
          ldi     zh,high(key_tab00)
		  ldi     zl,low(key_tab00)
		  add     zl,keytab0
		  adc     zh,clrtemp
		  ijmp
key_tab00:		       
		  rjmp    keyp00
		  rjmp    keyp10
		  rjmp    keyp20
		  rjmp    keyp30		 
;***************************************************	
keyp00:
          cbr     buffbit,bit_0
          sbrs    keybit,kmodebit          
          rjmp    keyp00_0
		  cbr     keybit,kmode_bit
		  cbr     keybit,bit_5
	      inc     keytab1
		  ldi     tempc,$02
		  cp      keytab1,tempc
		  brlo    keyp00_0  
		  clr     keytab1
keyp00_0:
          sbrs    keybit,bit4
		  rcall   kdisp000 
		  sbrs    keybit,bit5
		  rcall   kdisp001
		  sbrs    keybit,ksetbit          
          ret
		  cbr     keybit,0b00111111
		  clr     keytab2
		  clr     keytab3
		  clr     keytab4
		  ldi     tempc,$01
		  mov     keytab0,tempc
;***************************************************			          		  		             
keyp10:
          mov     tempc,keytab1
     	  sbrc    tempc,bit0
		  rjmp    keyp11 
keyp100:
          cbr     keybit,0b00011111
          clr     keytab2  
          clr     keytab3
		  clr     keytab4   
		  clr     maintab           ;显示时间
		  sbr     buffbit,bit_0
		  sbrs    keybit,bit5
		  rcall   kdisp1000
          ret
;*************************************************** 
keyp11:
          cbr     buffbit,bit_0
          sbrs    keybit,kmodebit          
          rjmp    keyp11_0
		  cbr     keybit,kmode_bit
		  cbr     keybit,bit_5
	      inc     keytab2
		  ldi     tempc,$04
		  cp      keytab2,tempc
		  brlo    keyp11_0  
		  clr     keytab2          
keyp11_0:
          sbrs    keybit,bit4
          rcall   kdisp100
		  sbrs    keybit,bit5
		  rcall   kdisp101
          sbrs    keybit,ksetbit          
          ret
		  cbr     keybit,0b00111111
		  clr     keytab3
		  clr     keytab4
		  ldi     tempc,$02
		  mov     keytab0,tempc
;***************************************************
keyp20: 
          cbr     buffbit,bit_0         
          ldi     zh,high(key_tab20)
		  ldi     zl,low(key_tab20)
		  add     zl,keytab2
		  adc     zh,clrtemp
		  ijmp
key_tab20:
          rjmp    keyp200   ;set time&date
		  rjmp    keyp210   ;set on time
		  rjmp    keyp220   ;set write
		  rjmp    keyp230   ;set read
keyp200:          
          cbr     buffbit,bit_0
          sbrs    keybit,kmodebit          
          rjmp    keyp100_0
		  cbr     keybit,kmode_bit
		  cbr     keybit,bit_5
	      inc     keytab3
		  ldi     tempc,$03
		  cp      keytab3,tempc
		  brlo    keyp100_0  
		  clr     keytab3          
keyp100_0:
          sbrs    keybit,bit4
		  rcall   kdisp200
          sbrs    keybit,bit5
          rcall   kdisp201
          sbrc    keybit,ksetbit 
		  rjmp    keyp30_0
		  ret   
;***************************************************
keyp210:
          sbrs    keybit,kmodebit          
          rjmp    keyp110_0
		  cbr     keybit,kmode_bit
		  cbr     keybit,bit_5
	      inc     keytab3
		  ldi     tempc,$03
		  cp      keytab3,tempc
		  brlo    keyp110_0  
		  clr     keytab3          
keyp110_0:
          sbrs    keybit,bit4
		  rcall   kdisp210
          sbrs    keybit,bit5
          rcall   kdisp211
		  lds     tempd,timesram
		  mov     tempc,keytab3
          sbrs    keybit,kaddbit
		  rjmp    keyp110_1
		  cbr     keybit,kadd_bit
		  sbr     keybit,bit_6  
		  mov     tempe,tempd
		  cpi     tempc,$00
		  brne    keyp110_00
		  sbr     tempd,bit_0
          sbrc    tempe,bit0
		  cbr     tempd,bit_0
          rjmp    keyp110_1
keyp110_00:
		  cpi     tempc,$01
		  brne    keyp110_01
		  sbr     tempd,bit_1
          sbrc    tempe,bit1
		  cbr     tempd,bit_1
          rjmp    keyp110_1
keyp110_01:
		  sbr     tempd,bit_2
          sbrc    tempe,bit2
		  cbr     tempd,bit_2
keyp110_1:
    	  ldi     tempe,$2a
          cpi     tempc,$00
		  brne    keyp110_02
		  sbrs    tempd,bit0
          ldi     tempe,$20
		  rjmp    keyp110_04
keyp110_02:
          cpi     tempc,$01
		  brne    keyp110_03
		  sbrs    tempd,bit1
          ldi     tempe,$20
		  rjmp    keyp110_04
keyp110_03:
		  sbrs    tempd,bit2
          ldi     tempe,$20
keyp110_04:         
		  sts     timesram,tempd
		  sts     lcdsram2+8,tempe	  		     
          sbrs    keybit,ksetbit          
          ret
		  cbr     keybit,ksetbit
		  mov     tempc,keytab3
		  cpi     tempc,$00
		  brne    keyp110_10
		  sbrc    tempd,bit0
          rjmp    keyp30_0
          ret
keyp110_10:
          cpi     tempc,$01
		  brne    keyp110_11    
		  sbrc    tempd,bit1
		  rjmp    keyp30_0
          ret
keyp110_11:
          sbrc    tempd,bit2
		  rjmp    keyp30_0
          ret
;***************************************************
keyp220:
   		  clr     keytab3
		  clr     keytab4
		  cbr     buffbit,bit_0
		  sbrc    keybit,ksetbit
		  rjmp    keyp30_0 
		  cbr     keybit,0b00011111          
          sbrs    keybit,bit5
		  rcall   kdisp1002
          ret
;***************************************************
keyp230:
   		  clr     keytab3
		  clr     keytab4
		  ldi     tempc,$03            ;读时间
		  mov     maintab,tempc
          cbr     keybit,0b00011111
		  sbrc    keybit,bit5
          ret  
		  sbr     buffbit,0b00001101
		  rcall   kdisp1001
          ret
;***************************************************
keyp30_0:
		  ldi     tempc,$03
		  mov     keytab0,tempc
		  clr     keytab4
		  cbr     keybit,0b00111111
          rcall   lcdincmov
;***************************************************		   
keyp30: 
          sbr     buffbit,bit_0
		  mov     tempc,keytab2
          cpi     tempc,$00
          brne    keyp30_0p  
		  rjmp    keyp300
keyp30_0p:
          cpi     tempc,$01
		  brne    keyp30_1p
		  rjmp    keyp310
keyp30_1p:   
		  ldi     tempc,$04         ;写时间
		  mov     maintab,tempc
          cbr     keybit,0b00011111
		  sbrc    keybit,bit5
          ret
		  sbr     buffbit,0b00001100
		  rcall   kdisp1003
		  ret
;***************************************************  
keyp300:
          sbrs    keybit,ksetbit
		  rjmp    keyp300_on 
		  cbr     keybit,0b00001111
		  ret 
keyp300_on:
          ldi     tempc,$01         ;设置时间
		  mov     maintab,tempc 
		  sbrs    keybit,bit4 
		  rcall   reds1302 
		  sbr     keybit,bit_4  
		  ldi     tempb,$10       
          ldi     zh,high(key_tab300)
		  ldi     zl,low(key_tab300)
		  add     zl,keytab3
		  adc     zh,clrtemp
		  ijmp
key_tab300:
          rjmp    keyp3000    ;set sre
		  rjmp    keyp3010    ;set hr
		  rjmp    keyp3020    ;set day
keyp3000: 
		  sbrs    keybit,bit5
	  	  rcall   kdisp300
          sbrs    keybit,kmodebit          
          rjmp    keyp300_0
		  cbr     keybit,kmode_bit
          rcall   lcdincmov
		  inc     keytab4
		  mov     tempc,keytab4
		  cpi     tempc,$06
		  brlo    keyp300_0
		  clr     keytab4
keyp300_0:		         
          sbrs    keybit,kaddbit
		  rjmp    keyp300_1
		  cbr     keybit,kadd_bit
		  sbr     keybit,bit_6         
          rcall   lcdincmov0
		  ldi     zh,high(time_tab0)
		  ldi     zl,low(time_tab0)
		  add     zl,keytab4
		  adc     zh,clrtemp
		  ijmp    
time_tab0:
		  rjmp    timeh0
		  rjmp    timeh1
		  rjmp    timem0
		  rjmp    timem1
		  rjmp    times0
		  rjmp    times1
timeh0:     
          lds     tempc,hrsram
		  rcall   sethrh
          sts     hrsram,tempc
          rjmp    keyp300_1
timeh1:
          lds     tempc,hrsram
		  rcall   sethrl
		  sts     hrsram,tempc
          rjmp    keyp300_1
timem0:
		  lds     tempc,minsram
		  rcall   setminh
		  sts     minsram,tempc
          rjmp    keyp300_1
timem1:
		  lds     tempc,minsram
          rcall   setminl
		  sts     minsram,tempc
          rjmp    keyp300_1
times0:
          lds     tempc,srcsram
		  rcall   setsrch
          sts     srcsram,tempc
          rjmp    keyp300_1
times1:
          lds     tempc,srcsram
		  rcall   setsrcl
          sts     srcsram,tempc
keyp300_1:
          rcall   srammovlcd_t 
		  rcall   lcdmovtemp		  		   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -