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

📄 1602b_lcd_test.s

📁 单片机应用 1.1602LCD 2.2004LCD源码 3.ATmega16 PWM源码 4.ATmega8 LED源码 5.无线影音Nrf2401源码 6.AVR串口源码
💻 S
字号:
	.module _1602B_LCD_TEST.c
	.area lit(rom, con, rel)
_table::
	.byte 48,49,50,51,52,53,54,55,56,57,0
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbsym e table _table A[11:11]kc
_love::
	.byte 'I,32,'L,'o,'v,'e,32,'U,44,'M,'e,'i,'M,'e,'i,33
	.byte 0
	.dbsym e love _love A[17:17]kc
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
_h::
	.blkb 1
	.area idata
	.byte 10
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbsym e h _h c
_m::
	.blkb 1
	.area idata
	.byte 40
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbsym e m _m c
_s::
	.blkb 1
	.area idata
	.byte 32
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbsym e s _s c
_ch1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbsym e ch1 _ch1 c
	.area text(rom, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 15
; #include <iom8v.h>
; #include <macros.h>
; #include <math.h>
; #include "1602LCD.h"
; const unsigned char table[]="0123456789";
; const unsigned char love[]="I Love U,MeiMei!";
; unsigned char h=0x0A,m=0x28,s=0x20,temp1;
; unsigned char ch,ch1=0; 
; 
; //TIMER1 initialize - prescale:1024
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1Hz
; // actual value:  1.000Hz (0.0%)
; void timer1_init(void)
; {
	.dbline 16
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 17
;  TCNT1H = 0xF0; //setup
	ldi R24,240
	out 0x2d,R24
	.dbline 18
;  TCNT1L = 0xBE;
	ldi R24,190
	out 0x2c,R24
	.dbline 19
;  OCR1AH = 0x0F;
	ldi R24,15
	out 0x2b,R24
	.dbline 20
;  OCR1AL = 0x42;
	ldi R24,66
	out 0x2a,R24
	.dbline 21
;  OCR1BH = 0x0F;
	ldi R24,15
	out 0x29,R24
	.dbline 22
;  OCR1BL = 0x42;
	ldi R24,66
	out 0x28,R24
	.dbline 23
;  ICR1H  = 0x0F;
	ldi R24,15
	out 0x27,R24
	.dbline 24
;  ICR1L  = 0x42;
	ldi R24,66
	out 0x26,R24
	.dbline 25
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 26
;  TCCR1B = 0x04; //start Timer
	ldi R24,4
	out 0x2e,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 16
	rjmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	rcall push_lset
	sbiw R28,2
	.dbline -1
	.dbline 31
; }
; 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
	.dbline 33
; //TIMER1 has overflowed
;  TCNT1H = 0xF0; //reload counter high value
	ldi R24,240
	out 0x2d,R24
	.dbline 34
;  TCNT1L = 0xBE; //reload counter low value
	ldi R24,190
	out 0x2c,R24
	.dbline 35
;     s++;
	lds R24,_s
	subi R24,255    ; addi 1
	sts _s,R24
	.dbline 36
;          if(s>0x3B)
	ldi R24,59
	lds R2,_s
	cp R24,R2
	brsh L3
	.dbline 37
; 		   {s=0x0;
	.dbline 37
	clr R2
	sts _s,R2
	.dbline 38
; 		    m++;}
	lds R24,_m
	subi R24,255    ; addi 1
	sts _m,R24
	.dbline 38
L3:
	.dbline 39
; 		   if(m>0x3B)
	ldi R24,59
	lds R2,_m
	cp R24,R2
	brsh L5
	.dbline 40
; 		     {m=0x0;
	.dbline 40
	clr R2
	sts _m,R2
	.dbline 41
; 		      h++;}
	lds R24,_h
	subi R24,255    ; addi 1
	sts _h,R24
	.dbline 41
L5:
	.dbline 42
; 			  if(h>0x0C)
	ldi R24,12
	lds R2,_h
	cp R24,R2
	brsh L7
	.dbline 43
; 		      {h=0x0;}
	.dbline 43
	clr R2
	sts _h,R2
	.dbline 43
L7:
	.dbline 45
; 			  
;       write_s(s);
	lds R16,_s
	clr R17
	rcall _write_s
	.dbline 46
; 	  write_m(m);
	lds R16,_m
	clr R17
	rcall _write_m
	.dbline 47
; 	  write_h(h);
	lds R16,_h
	clr R17
	rcall _write_h
	.dbline 48
; 	  LCD_set_xy(ch,1);
	ldi R18,1
	lds R16,_ch
	rcall _LCD_set_xy
	.dbline 49
; 	  LCD_write_char(0,love[ch1]);
	ldi R24,<_love
	ldi R25,>_love
	lds R30,_ch1
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 50
; 	  ch++;
	lds R24,_ch
	subi R24,255    ; addi 1
	sts _ch,R24
	.dbline 51
; 	  ch1++;
	lds R24,_ch1
	subi R24,255    ; addi 1
	sts _ch1,R24
	.dbline 52
; 	  if(ch>15)
	ldi R24,15
	lds R2,_ch
	cp R24,R2
	brsh L9
	.dbline 53
; 	  {ch=ch-16;	  
	.dbline 53
	mov R24,R2
	subi R24,16
	sts _ch,R24
	.dbline 54
; 	  }
L9:
	.dbline 55
	ldi R24,16
	lds R2,_ch1
	cp R24,R2
	brsh L11
	.dbline 56
	.dbline 56
	clr R2
	sts _ch1,R2
	.dbline 57
	sts _ch,R2
	.dbline 58
	ldi R24,<L13
	ldi R25,>L13
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 58
L11:
	.dbline -2
L2:
	adiw R28,2
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e write_h _write_h fV
;           temp -> R20
;              h -> R22
	.even
_write_h::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 61
; 	  if(ch1>16)
; 	  {ch1=0;
; 	  ch=0;
; 	  LCD_write_string(0,1,"                ");}
; }
; void write_h(unsigned char h)
; {		   unsigned char temp=0;
	.dbline 61
	clr R20
	.dbline 62
; 		   LCD_set_xy(0,0);
	clr R18
	clr R16
	rcall _LCD_set_xy
	.dbline 63
; 		   temp=h/10;
	ldi R17,10
	mov R16,R22
	rcall div8u
	mov R20,R16
	.dbline 64
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 65
; 		   temp=h%10;
	ldi R17,10
	mov R16,R22
	rcall mod8u
	mov R20,R16
	.dbline 66
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 67
; 		   LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline -2
L14:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r h 22 c
	.dbend
	.dbfunc e write_m _write_m fV
;           temp -> R20
;              m -> R22
	.even
_write_m::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 71
; }
; 
; void write_m(unsigned char m)
; {		   unsigned char temp=0;
	.dbline 71
	clr R20
	.dbline 72
; 		   LCD_set_xy(3,0);
	clr R18
	ldi R16,3
	rcall _LCD_set_xy
	.dbline 73
; 		   temp=m/10;
	ldi R17,10
	mov R16,R22
	rcall div8u
	mov R20,R16
	.dbline 74
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 75
; 		   temp=m%10;
	ldi R17,10
	mov R16,R22
	rcall mod8u
	mov R20,R16
	.dbline 76
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 77
; 		   LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline -2
L15:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r m 22 c
	.dbend
	.dbfunc e write_s _write_s fV
;           temp -> R20
;              s -> R22
	.even
_write_s::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 81
; }
; 
; void write_s(unsigned char s)
; {		   unsigned char temp=0;
	.dbline 81
	clr R20
	.dbline 82
;            LCD_set_xy(6,0);
	clr R18
	ldi R16,6
	rcall _LCD_set_xy
	.dbline 83
; 		   temp=s/10;
	ldi R17,10
	mov R16,R22
	rcall div8u
	mov R20,R16
	.dbline 84
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 85
; 		   temp=s%10;
	ldi R17,10
	mov R16,R22
	rcall mod8u
	mov R20,R16
	.dbline 86
; 		   LCD_write_char(0,table[temp]);
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline -2
L16:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r s 22 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 90
; }
; 
; void main(void)
;   {     unsigned char i=0b000001; 
	.dbline 90
	ldi R20,1
	.dbline 92
; 
;      OSCCAL=0XBA;
	ldi R24,186
	out 0x31,R24
	.dbline 94
; 
; 	 DDRD |= LCD_DATA | LCD_RW;
	in R24,0x11
	ori R24,248
	out 0x11,R24
	.dbline 95
;      DDRC |= LCD_RS   | LCD_EN;
	in R24,0x14
	ori R24,48
	out 0x14,R24
	.dbline 97
;      
;      LCD_init();
	rcall _LCD_init
	.dbline 98
; 	 LCD_write_char(0x01,0); 
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 100
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 101
;  timer1_init();
	rcall _timer1_init
	.dbline 103
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 104
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 105
;  TIMSK = 0x04; //timer interrupt sources
	ldi R24,4
	out 0x39,R24
	.dbline 106
;  SEI(); //re-enable interrupts
	sei
	.dbline 108
;  //all peripherals are now initialized
;  		   LCD_set_xy(3,0);
	clr R18
	ldi R16,3
	rcall _LCD_set_xy
	.dbline 110
; 
; 		   LCD_set_xy(6,0);
	clr R18
	ldi R16,6
	rcall _LCD_set_xy
	.dbline 111
; 		   LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_char
L18:
	.dbline 114
	.dbline 114
	.dbline 114
L19:
	.dbline 113
	rjmp L18
X0:
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
_ch::
	.blkb 1
	.dbsym e ch _ch c
_temp1::
	.blkb 1
	.dbsym e temp1 _temp1 c
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
L13:
	.blkb 17
	.area idata
	.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.byte 0
	.area data(ram, con, rel)
	.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c

⌨️ 快捷键说明

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