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

📄 1602b_lcd_test.s

📁 用avr的m16产生pwm波控制舵机的程序!
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module _1602B_LCD_TEST.c
	.area data(ram, con, rel)
_n::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
	.dbsym e n _n c
_t::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
	.dbsym e t _t c
	.area vector(rom, abs)
	.org 16
	jmp _timer2_ovf_isr
	.area data(ram, con, rel)
	.dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
	.area text(rom, con, rel)
	.dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.even
_timer2_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 18
; #include <iom16v.h>
; #include <macros.h>
; #include "1602LCD.h"
; volatile int zkb;
; volatile int zq;          
; volatile int t1,t2;
; uchar n=0,t=0;
; void delay_1ms(void); //函数声明,本实验中会用到这两个函数
; void delay_nms(unsigned int n);  
; /*DS1302函数声明*/
; void write_data(uchar addr,uchar data);
; uchar read_data(uchar addr);
; void init_1302(void);
; void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d,uchar year);
; //PWM信号产生中断函数
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void)
; {
	.dbline 21
; // Reinitialize Timer 2 value
; //每次触发为20微秒
; TCNT2 = 0xF1;           //反转值,理论值为0xEC 但是实测值为0xEF  有点没搞懂  ??
	ldi R24,241
	out 0x24,R24
	.dbline 23
; 
;   if((--zq)==0)
	lds R24,_zq
	lds R25,_zq+1
	sbiw R24,1
	sts _zq+1,R25
	sts _zq,R24
	cpi R24,0
	cpc R24,R25
	brne L2
X0:
	.dbline 24
;   {      
	.dbline 25
;     PORTC^=0B00000001;    //PORTB.0 反转  
	ldi R24,1
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 26
;     if((PORTC&0x01)==0x01)
	in R24,0x15
	andi R24,1
	cpi R24,1
	brne L4
	.dbline 27
; 	{
	.dbline 28
;       zq=t1; 
	lds R2,_t1
	lds R3,_t1+1
	sts _zq+1,R3
	sts _zq,R2
	.dbline 29
;     }else
	xjmp L5
L4:
	.dbline 30
;     {
	.dbline 31
;       zq=t2;
	lds R2,_t2
	lds R3,_t2+1
	sts _zq+1,R3
	sts _zq,R2
	.dbline 32
;     }          
L5:
	.dbline 33
L2:
	.dbline -2
L1:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 36
;   }
; }
; void timer2_init(void)//50kHz
; {
	.dbline 38
;  //TCCR2 = 0x00; //stop
; ASSR=0x00;
	clr R2
	out 0x22,R2
	.dbline 39
; TCCR2=0x02;
	ldi R24,2
	out 0x25,R24
	.dbline 40
; TCNT2=0xEF;
	ldi R24,239
	out 0x24,R24
	.dbline 41
; OCR2=0x00;
	out 0x23,R2
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e showtime _showtime fV
;              i -> <dead>
;             th -> R22
;             tl -> R20
;              s -> R10
	.even
_showtime::
	xcall push_gset3
	sbiw R28,2
	.dbline -1
	.dbline 47
; }
; /************************************************
; 1302显示子程序
; ************************************************/
; void showtime()
; {
	.dbline 50
;  	  uchar s,i,th,tl;
;  //1302
;      s=read_data(0x8b);
	ldi R16,139
	xcall _read_data
	mov R10,R16
	.dbline 51
; 	 tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 52
; 	  switch(tl)
	mov R22,R20
	clr R23
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L11
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L13
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L15
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	breq L17
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	breq L19
	cpi R22,6
	ldi R30,0
	cpc R23,R30
	breq L21
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L23
	xjmp L8
X1:
	.dbline 53
; 	  		{
L11:
	.dbline 54
; 			case 1:LCD_write_string(0,0,"monday");break;
	ldi R24,<L12
	ldi R25,>L12
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 54
	xjmp L9
L13:
	.dbline 55
; 			case 2:LCD_write_string(0,0,"tuesday");break;
	ldi R24,<L14
	ldi R25,>L14
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 55
	xjmp L9
L15:
	.dbline 56
; 			case 3:LCD_write_string(0,0,"wednesday");break;
	ldi R24,<L16
	ldi R25,>L16
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 56
	xjmp L9
L17:
	.dbline 57
; 			case 4:LCD_write_string(0,0,"thursday");break;
	ldi R24,<L18
	ldi R25,>L18
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 57
	xjmp L9
L19:
	.dbline 58
; 			case 5:LCD_write_string(0,0,"friday");break;
	ldi R24,<L20
	ldi R25,>L20
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 58
	xjmp L9
L21:
	.dbline 59
; 			case 6:LCD_write_string(0,0,"saturday");break;
	ldi R24,<L22
	ldi R25,>L22
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 59
	xjmp L9
L23:
	.dbline 60
; 			case 7:LCD_write_string(0,0,"sunday");break;
	ldi R24,<L24
	ldi R25,>L24
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 60
L8:
L9:
	.dbline 62
; 			}
; 	  LCD_set_xy(0,1);
	ldi R18,1
	clr R16
	xcall _LCD_set_xy
	.dbline 64
; 	  //year
; 	  s=read_data(0x8d);
	ldi R16,141
	xcall _read_data
	mov R10,R16
	.dbline 65
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 66
;    	  th=(s>>4);
	mov R22,R10
	swap R22
	andi R22,#0x0F
	.dbline 68
;    	  //LCD_write_char(0,th+48);
;       LCD_write_char(0,tl+48);
	mov R18,R20
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 69
; 	  LCD_write_char(0,'/');
	ldi R18,47
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 71
; 	  //month
;    	  s=read_data(0x89);
	ldi R16,137
	xcall _read_data
	mov R10,R16
	.dbline 72
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 73
;    	  th=(s>>4);
	mov R22,R10
	swap R22
	andi R22,#0x0F
	.dbline 74
;    	  LCD_write_char(0,th+48);
	mov R18,R22
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 75
;       LCD_write_char(0,tl+48);
	mov R18,R20
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 76
; 	  LCD_write_char(0,'/');
	ldi R18,47
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 78
; 	  //day
;    	  s=read_data(0x87);
	ldi R16,135
	xcall _read_data
	mov R10,R16
	.dbline 79
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 80
;    	  th=(s>>4);
	mov R22,R10
	swap R22
	andi R22,#0x0F
	.dbline 81
;       LCD_write_char(0,th+48);
	mov R18,R22
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 82
;       LCD_write_char(0,tl+48);
	mov R18,R20
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 84
; 	  //LCD_write_char(0,' ');
; 	  LCD_write_char(0,' ');
	ldi R18,32
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 87
; 	  // LCD_set_xy(0,1);
; 	  //hour
;    	  s=read_data(0x85);
	ldi R16,133
	xcall _read_data
	mov R10,R16
	.dbline 88
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 89
;    	  th=(s>>4);
	mov R22,R10
	swap R22
	andi R22,#0x0F
	.dbline 90
;    	  LCD_write_char(0,th+48);
	mov R18,R22
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 91
;       LCD_write_char(0,tl+48);
	mov R18,R20
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 92
; 	  LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 94
; 	  //min
;    	  s=read_data(0x83);
	ldi R16,131
	xcall _read_data
	mov R10,R16
	.dbline 95
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 96
;    	  th=(s>>4);
	mov R22,R10
	swap R22
	andi R22,#0x0F
	.dbline 97
;    	  LCD_write_char(0,th+48);
	mov R18,R22
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 98
;       LCD_write_char(0,tl+48);
	mov R18,R20
	clr R19
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 99
; 	  LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 101
; 	  //sec
;    	  s=read_data(0x81);
	ldi R16,129
	xcall _read_data
	mov R10,R16
	.dbline 102
; 	  tl=s&0x0f;
	mov R20,R10
	andi R20,15
	.dbline 103
;    	  th=(s>>4);
	mov R22,R10

⌨️ 快捷键说明

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