📄 test.s
字号:
.module test.c
.area text(rom, con, rel)
.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
.dbfile D:\iccavr\mega16\11\10bit_adc\delay.h
.dbfunc e delay_us _delay_us fV
.even
_delay_us::
.dbline -1
.dbline 6
; /**********延时函数*****************/
; /*-----------------------------------------------
; delay_us :1us延时函数
; ------------------------------------------------*/
; void delay_us(void)
; {
.dbline 7
; asm("nop");
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; t -> R20,R21
.even
_delay_nus::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 14
; }
; /*-----------------------------------------------
; delay_nus :长延时函数
; 输入参数: t :延时时间 us
; ------------------------------------------------*/
; void delay_nus(unsigned int t)
; {
xjmp L4
L3:
.dbline 16
; while(t--)
; delay_us();
xcall _delay_us
L4:
.dbline 15
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L3
tst R3
brne L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r t 20 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R16,R17
.even
_delay_ms::
.dbline -1
.dbline 22
; }
; /*----------------------------------------------
; delay_ms :1ms延时函数
; -----------------------------------------------*/
; void delay_ms(void)
; {
.dbline 24
; unsigned int i;
; for(i=0;i<1140;i++);
clr R16
clr R17
xjmp L10
L7:
.dbline 24
L8:
.dbline 24
subi R16,255 ; offset = 1
sbci R17,255
L10:
.dbline 24
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L7
X1:
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; t -> R20,R21
.even
_delay_nms::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 31
; }
; /*----------------------------------------------
; delay_nms :长延时函数
; 输入参数: t :延时时间 ms
; -----------------------------------------------*/
; void delay_nms(unsigned int t)
; {
xjmp L13
L12:
.dbline 33
; while(t--)
; delay_ms();
xcall _delay_ms
L13:
.dbline 32
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L12
tst R3
brne L12
X2:
.dbline -2
L11:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r t 20 i
.dbend
.dbfile D:\iccavr\mega16\11\10bit_adc\lcd12232.h
.dbfunc e lcd_write _lcd_write fV
; j -> R22
; a -> R20
; i -> R10
; content -> R10
; dat_comm -> R12
.even
_lcd_write::
xcall push_xgsetF03C
mov R10,R18
mov R12,R16
.dbline -1
.dbline 18
; //定义LCD口线
; #define lcd_cs PA4
; #define lcd_std PA3
; #define lcd_sclk PA2
; #define lcd_port PORTA
; #define lcd_ddr DDRA
;
; //LCD显示坐标定义
; #define x1 0x80 //lcd初始坐标1
; #define x2 0x90 //lcd初始坐标2
;
; //LCD数据/命令格式定义
; #define command 0 //lcd命令
; #define data 1 //lcd数据
;
; //传送单个字节到LCD
; void lcd_write(unsigned char dat_comm,unsigned char content)
; {
.dbline 20
; unsigned char a,i,j;
; delay_ms();//延时时间要根据实际使用的芯片采用不同的延时时间
xcall _delay_ms
.dbline 21
; a=content; //数据记录
mov R20,R10
.dbline 23
; //delay_ms();//这个延时要根据实际需要看是否需要增加//如8515就要加
; lcd_port|=BIT(lcd_cs);//cs=1
sbi 0x1b,4
.dbline 24
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 25
; lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//std=1;
sbi 0x1b,3
.dbline 26
; for(i=0;i<5;i++) //启动命令
clr R10
xjmp L19
L16:
.dbline 27
; {
.dbline 28
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 29
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 30
; }
L17:
.dbline 26
inc R10
L19:
.dbline 26
mov R24,R10
cpi R24,5
brlo L16
X3:
.dbline 31
; lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
cbi 0x1b,3
.dbline 32
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 33
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 34
; if(dat_comm)
tst R12
breq L20
X4:
.dbline 35
; lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//std=1; //数据
sbi 0x1b,3
xjmp L21
L20:
.dbline 37
; else
; lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0; //命令
cbi 0x1b,3
L21:
.dbline 38
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 39
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 40
; lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
cbi 0x1b,3
.dbline 41
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 42
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 43
; for(j=0;j<2;j++) //循环发送8个位数据
clr R22
xjmp L25
L22:
.dbline 44
; {
.dbline 45
; for(i=0;i<4;i++)
clr R10
xjmp L29
L26:
.dbline 46
; {
.dbline 47
; if ((a&0x80)==0x80)
mov R24,R20
andi R24,128
cpi R24,128
brne L30
X5:
.dbline 48
; lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//单字节传送
sbi 0x1b,3
xjmp L31
L30:
.dbline 50
; else
; lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);
cbi 0x1b,3
L31:
.dbline 51
; a=a<<1;
lsl R20
.dbline 52
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 53
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 54
; }
L27:
.dbline 45
inc R10
L29:
.dbline 45
mov R24,R10
cpi R24,4
brlo L26
X6:
.dbline 55
; lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
cbi 0x1b,3
.dbline 56
; for(i=0;i<4;i++) //发送4个空数据
clr R10
xjmp L35
L32:
.dbline 57
; {
.dbline 58
; lcd_port|=BIT(lcd_sclk);//sclk=1;
sbi 0x1b,2
.dbline 59
; lcd_port&=~BIT(lcd_sclk);//sclk=0;
cbi 0x1b,2
.dbline 60
; }
L33:
.dbline 56
inc R10
L35:
.dbline 56
mov R24,R10
cpi R24,4
brlo L32
X7:
.dbline 61
; }
L23:
.dbline 43
inc R22
L25:
.dbline 43
cpi R22,2
brlo L22
X8:
.dbline 62
; lcd_port|=BIT(lcd_cs);
sbi 0x1b,4
.dbline -2
L15:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r j 22 c
.dbsym r a 20 c
.dbsym r i 10 c
.dbsym r content 10 c
.dbsym r dat_comm 12 c
.dbend
.dbfunc e LCD_init _LCD_init fV
.even
_LCD_init::
.dbline -1
.dbline 67
; }
;
; //LCD初始化
; void LCD_init(void)
; {
.dbline 69
; /**********LCD12232串口口线设置************/
; lcd_port|=BIT(lcd_cs)|BIT(lcd_sclk)|BIT(lcd_std);
in R24,0x1b
ori R24,28
out 0x1b,R24
.dbline 70
; lcd_ddr|=BIT(lcd_cs)|BIT(lcd_sclk)|BIT(lcd_std);
in R24,0x1a
ori R24,28
out 0x1a,R24
.dbline 72
;
; lcd_write(command,0x30); //30---基本指令动作
ldi R18,48
clr R16
xcall _lcd_write
.dbline 74
; //lcd_write(command,0x04); //点设定:显示字符/光标从左到右移位,DDRAM地址加1
; lcd_write(command,0x01); //清屏,地址指针指向00H
ldi R18,1
clr R16
xcall _lcd_write
.dbline 75
; lcd_write(command,0x06); //光标的移动方向
ldi R18,6
clr R16
xcall _lcd_write
.dbline 76
; lcd_write(command,0x0c); //开显示,关游标
ldi R18,12
clr R16
xcall _lcd_write
.dbline 77
; delay_ms(); //液晶初始化后延时
xcall _delay_ms
.dbline -2
L36:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_display _lcd_display fV
; i -> R20
; chn -> R10,R11
.even
_lcd_display::
xcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 82
; }
;
; //LCD全屏显示字符
; void lcd_display(unsigned char chn[30])
; {
.dbline 84
; unsigned char i;
; lcd_write(command,0x30);
ldi R18,48
clr R16
xcall _lcd_write
.dbline 85
; lcd_write(command,x1);
ldi R18,128
clr R16
xcall _lcd_write
.dbline 86
; for (i=0;i<15;i++)
clr R20
xjmp L41
L38:
.dbline 87
; lcd_write(data,chn[i]);
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R18,z+0
ldi R16,1
xcall _lcd_write
L39:
.dbline 86
inc R20
L41:
.dbline 86
cpi R20,15
brlo L38
X9:
.dbline 88
; lcd_write(command,x2);
ldi R18,144
clr R16
xcall _lcd_write
.dbline 89
; for (i=0;i<15;i++)
clr R20
xjmp L45
L42:
.dbline 90
; lcd_write(data,chn[15+i]);
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R18,z+15
ldi R16,1
xcall _lcd_write
L43:
.dbline 89
inc R20
L45:
.dbline 89
cpi R20,15
brlo L42
X10:
.dbline -2
L37:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r i 20 c
.dbsym r chn 10 pc
.dbend
.dbfunc e line1_display _line1_display fV
; i -> R20
; chn -> R10,R11
.even
_line1_display::
xcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 95
; }
;
; //LCD第一行显示字符
; void line1_display(unsigned char chn[15])
; {
.dbline 97
; unsigned char i;
; lcd_write(command,0x30);
ldi R18,48
clr R16
xcall _lcd_write
.dbline 98
; lcd_write(command,x1);
ldi R18,128
clr R16
xcall _lcd_write
.dbline 99
; for (i=0;i<15;i++)
clr R20
xjmp L50
L47:
.dbline 100
; lcd_write(data,chn[i]);
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R18,z+0
ldi R16,1
xcall _lcd_write
L48:
.dbline 99
inc R20
L50:
.dbline 99
cpi R20,15
brlo L47
X11:
.dbline -2
L46:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r i 20 c
.dbsym r chn 10 pc
.dbend
.dbfunc e line2_display _line2_display fV
; i -> R20
; chn -> R10,R11
.even
_line2_display::
xcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 105
; }
;
; //LCD第二行显示字符
; void line2_display(unsigned char chn[15])
; {
.dbline 107
; unsigned char i;
; lcd_write(command,0x30);
ldi R18,48
clr R16
xcall _lcd_write
.dbline 108
; lcd_write(command,x2);
ldi R18,144
clr R16
xcall _lcd_write
.dbline 109
; for (i=0;i<15;i++)
clr R20
xjmp L55
L52:
.dbline 110
; lcd_write(data,chn[i]);
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R18,z+0
ldi R16,1
xcall _lcd_write
L53:
.dbline 109
inc R20
L55:
.dbline 109
cpi R20,15
brlo L52
X12:
.dbline -2
L51:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r i 20 c
.dbsym r chn 10 pc
.dbend
.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 13
; //ICC-AVR application builder : 2008-11-4 12:53:50
; // Target : M16
; // Crystal: 8.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
;
; #include "delay.h"
; #include "lcd12232.h"
; //#include "adc.h"
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 15
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 16
; LCD_init();
xcall _LCD_init
.dbline 17
; PORTD|=BIT(PD7);
sbi 0x12,7
.dbline 18
; DDRD|=BIT(PD7);
sbi 0x11,7
.dbline 20
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 21
; GICR = 0x00;
out 0x3b,R2
.dbline 22
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 23
; SEI(); //re-enable interrupts
sei
.dbline -2
L56:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; adc1 -> <dead>
; adc0 -> <dead>
.even
_main::
.dbline -1
.dbline 29
; //all peripherals are now initialized
; }
;
; //
; void main(void)
; {
.dbline 31
; unsigned int adc0,adc1;
; init_devices();
xcall _init_devices
.dbline 33
; //insert your functional code here...
; lcd_display("LCD12232-9液晶 "" 显示测试 ");
ldi R16,<L58
ldi R17,>L58
xcall _lcd_display
L59:
.dbline 37
; //delay_nms(2000);
;
; while(1)
; {
.dbline 43
; //adc0=GetAdcValue(0);
; //LCD_write_adc(7,0,adc0);
;
; //adc1=GetAdcValue(1);
; //LCD_write_adc(7,1,adc1);
; }
L60:
.dbline 36
xjmp L59
X13:
.dbline -2
L57:
.dbline 0 ; func end
ret
.dbsym l adc1 1 i
.dbsym l adc0 1 i
.dbend
.area data(ram, con, rel)
.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
L58:
.blkb 31
.area idata
.byte 'L,'C,'D,49,50,50,51,50,45,57,210,186,190,167,32,32
.byte 32,32,32,207,212,202,190,178,226,202,212,32,32,32,0
.area data(ram, con, rel)
.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
; }
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -