📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_BCDdata::
.blkb 2
.area idata
.byte 1,2
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,4
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 5,6
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 7,8
.area data(ram, con, rel)
.dbfile G:\CH452L/ch452ldriver.h
.dbsym e BCDdata _BCDdata A[8:8]c
.area text(rom, con, rel)
.dbfile G:\CH452L/ch452ldriver.h
.dbfile G:\CH452L\main.c
.dbfunc e Init_Uart _Init_Uart fI
.even
_Init_Uart::
.dbline -1
.dbline 13
; #include<iom8v.h>
; #include<macros.h>
; #include"delay.h"
; #include"ch452ldriver.h"
;
; /*******************************************************************
; *函数名称:初始化串口
; *函数功能:初始化USART为波特率9600,8bit数据,收发使能,接收中断允许
; *入口参数:无
; *出口参数:无
; ******************************************************************/
; int Init_Uart(void)
; {
.dbline 14
; CLI(); //初始化USART时先关全局中断
cli
.dbline 15
; UCSRB = 0x00;
clr R2
out 0xa,R2
.dbline 16
; UCSRA = 0x00;
out 0xb,R2
.dbline 17
; UCSRC = BIT(URSEL) | 0x06;
ldi R24,134
out 0x20,R24
.dbline 18
; UBRRL = 0x33; //设置波特率低位
ldi R24,51
out 0x9,R24
.dbline 19
; UBRRH = 0x00; //设置波特率高位
out 0x20,R2
.dbline 20
; UCSRB = 0x98;
ldi R24,152
out 0xa,R24
.dbline 21
; SEI();
sei
.dbline 22
; return 0x30;
ldi R16,48
ldi R17,0
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Uart_Transmit _Uart_Transmit fV
; data -> R16
.even
_Uart_Transmit::
.dbline -1
.dbline 32
; }
;
; /*************************************************
; 函数名称:void Us0Transmit (unsigned char data)
; 函数功能:发送数据
; 入口参数:unsigned char data
; 出口参数:无
; *************************************************/
; void Uart_Transmit (unsigned char data)
; {
L3:
.dbline 33
L4:
.dbline 33
; while ( !(UCSRA & (1<<UDRE))); //等待UDR为空
sbis 0xb,5
rjmp L3
.dbline 34
; UDR = data;
out 0xc,R16
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.area vector(rom, abs)
.org 22
rjmp _UartRxIsr
.area text(rom, con, rel)
.dbfile G:\CH452L\main.c
.dbfunc e UartRxIsr _UartRxIsr fV
.even
_UartRxIsr::
st -y,R0
in R0,0x3f
st -y,R0
.dbline -1
.dbline 42
; }
;
; //UART中断接收服务函数,形如 04 xx 02 xx (xx xx)
; //其中04为接收的标志,02为接收的长度(可变),括号里的为数据
; //接收成功后,置位Us0RCoF,接收到的数据保存在Us0BufRec中,保存的数据是整个数据包
; #pragma interrupt_handler UartRxIsr:12
; void UartRxIsr(void)
; {
.dbline 45
; //unsigned char temp;
; //temp = UDR; //取出数据
; asm("nop");
nop
.dbline -2
L6:
ld R0,y+
out 0x3f,R0
ld R0,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
; i -> <dead>
; temp -> R20
.even
_main::
.dbline -1
.dbline 49
; }
;
; void main(void)
; {
.dbline 51
; unsigned char temp,i;
; Init_Int0();
rcall _Init_Int0
.dbline 52
; Delay_Nus(5);
ldi R16,5
ldi R17,0
rcall _Delay_Nus
.dbline 53
; Init_Uart();
rcall _Init_Uart
.dbline 54
; Delay_Nus(5);
ldi R16,5
ldi R17,0
rcall _Delay_Nus
.dbline 55
; Init_Ch452lport();
rcall _Init_Ch452lport
.dbline 56
; Delay_Nus(5);
ldi R16,5
ldi R17,0
rcall _Delay_Nus
.dbline 57
; Init_Ch452lsystem();
rcall _Init_Ch452lsystem
.dbline 58
; Delay_Nms(1500);
ldi R16,1500
ldi R17,5
rcall _Delay_Nms
.dbline 59
; Display_Ch452lBCD(8,BCDdata);
ldi R18,<_BCDdata
ldi R19,>_BCDdata
ldi R16,8
rcall _Display_Ch452lBCD
.dbline 60
; Delay_Nms(20); //延时
ldi R16,20
ldi R17,0
rcall _Delay_Nms
rjmp L9
L8:
.dbline 63
;
; while(1)
; {
.dbline 64
; if(flag==1)
lds R24,_flag
lds R25,_flag+1
cpi R24,1
ldi R30,0
cpc R25,R30
brne L11
.dbline 65
; {
.dbline 66
; temp=Read_Keycode();
rcall _Read_Keycode
mov R20,R16
.dbline 67
; Uart_Transmit(0x02);
ldi R16,2
rcall _Uart_Transmit
.dbline 68
; Uart_Transmit(temp);
mov R16,R20
rcall _Uart_Transmit
.dbline 69
; flag=0;
clr R2
clr R3
sts _flag+1,R3
sts _flag,R2
.dbline 70
; }
L11:
.dbline 98
L9:
.dbline 62
rjmp L8
X0:
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbsym r temp 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -