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

📄 main.lis

📁 ch452的数码管和键盘驱动程序
💻 LIS
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _BCDdata::
 0000                   .blkb 2
                        .area idata
 0000 0102              .byte 1,2
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0304              .byte 3,4
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 0506              .byte 5,6
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0708              .byte 7,8
                        .area data(ram, con, rel)
 0008                   .dbfile G:\CH452L/ch452ldriver.h
 0008                   .dbsym e BCDdata _BCDdata A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\CH452L/ch452ldriver.h
 0000                   .dbfile G:\CH452L\main.c
 0000                   .dbfunc e Init_Uart _Init_Uart fI
                        .even
 0000           _Init_Uart::
 0000                   .dbline -1
 0000                   .dbline 13
 0000           ; #include<iom8v.h>
 0000           ; #include<macros.h>
 0000           ; #include"delay.h"
 0000           ; #include"ch452ldriver.h"
 0000           ; 
 0000           ; /*******************************************************************
 0000           ; *函数名称:初始化串口
 0000           ; *函数功能:初始化USART为波特率9600,8bit数据,收发使能,接收中断允许
 0000           ; *入口参数:无
 0000           ; *出口参数:无
 0000           ; ******************************************************************/
 0000           ; int Init_Uart(void)
 0000           ; {
 0000                   .dbline 14
 0000           ;     CLI();   //初始化USART时先关全局中断           
 0000 F894              cli
 0002                   .dbline 15
 0002           ;     UCSRB = 0x00;             
 0002 2224              clr R2
 0004 2AB8              out 0xa,R2
 0006                   .dbline 16
 0006           ;     UCSRA = 0x00;
 0006 2BB8              out 0xb,R2
 0008                   .dbline 17
 0008           ;     UCSRC = BIT(URSEL) | 0x06;
 0008 86E8              ldi R24,134
 000A 80BD              out 0x20,R24
 000C                   .dbline 18
 000C           ;     UBRRL = 0x33;             //设置波特率低位
 000C 83E3              ldi R24,51
 000E 89B9              out 0x9,R24
 0010                   .dbline 19
 0010           ;     UBRRH = 0x00;             //设置波特率高位
 0010 20BC              out 0x20,R2
 0012                   .dbline 20
 0012           ;     UCSRB = 0x98;
 0012 88E9              ldi R24,152
 0014 8AB9              out 0xa,R24
 0016                   .dbline 21
 0016           ;     SEI(); 
 0016 7894              sei
 0018                   .dbline 22
 0018           ;       return 0x30;
 0018 00E3              ldi R16,48
 001A 10E0              ldi R17,0
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e Uart_Transmit _Uart_Transmit fV
 001E           ;           data -> R16
                        .even
 001E           _Uart_Transmit::
 001E                   .dbline -1
 001E                   .dbline 32
 001E           ; }
 001E           ; 
 001E           ; /*************************************************
 001E           ;  函数名称:void Us0Transmit (unsigned char data)
 001E           ;  函数功能:发送数据
 001E           ;  入口参数:unsigned char data
 001E           ;  出口参数:无
 001E           ; *************************************************/
 001E           ; void Uart_Transmit (unsigned char data)
 001E           ; {
 001E           L3:
 001E                   .dbline 33
 001E           L4:
 001E                   .dbline 33
 001E           ;       while ( !(UCSRA & (1<<UDRE)));            //等待UDR为空
 001E 5D9B              sbis 0xb,5
 0020 FECF              rjmp L3
 0022                   .dbline 34
 0022           ;       UDR = data;
 0022 0CB9              out 0xc,R16
 0024                   .dbline -2
 0024           L2:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbsym r data 16 c
 0026                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 13C0              rjmp _UartRxIsr
                        .area text(rom, con, rel)
 0026                   .dbfile G:\CH452L\main.c
 0026                   .dbfunc e UartRxIsr _UartRxIsr fV
                        .even
 0026           _UartRxIsr::
 0026 0A92              st -y,R0
 0028 0FB6              in R0,0x3f
 002A 0A92              st -y,R0
 002C                   .dbline -1
 002C                   .dbline 42
 002C           ; }
 002C           ; 
 002C           ; //UART中断接收服务函数,形如 04 xx 02 xx (xx xx)
 002C           ; //其中04为接收的标志,02为接收的长度(可变),括号里的为数据
 002C           ; //接收成功后,置位Us0RCoF,接收到的数据保存在Us0BufRec中,保存的数据是整个数据包
 002C           ; #pragma interrupt_handler UartRxIsr:12
 002C           ; void UartRxIsr(void)
 002C           ; {
 002C                   .dbline 45
 002C           ;      //unsigned char temp;
 002C           ;        //temp = UDR;                                            //取出数据 
 002C           ;        asm("nop");
 002C 0000              nop
 002E                   .dbline -2
 002E           L6:
 002E 0990              ld R0,y+
 0030 0FBE              out 0x3f,R0
 0032 0990              ld R0,y+
 0034                   .dbline 0 ; func end
 0034 1895              reti
 0036                   .dbend
 0036                   .dbfunc e main _main fV
 0036           ;              i -> <dead>
 0036           ;           temp -> R20
                        .even
 0036           _main::
 0036                   .dbline -1
 0036                   .dbline 49
 0036           ; }
 0036           ; 
 0036           ; void main(void)
 0036           ; {
 0036                   .dbline 51
 0036           ;       unsigned char temp,i;
 0036           ;       Init_Int0();
 0036 00D0              rcall _Init_Int0
 0038                   .dbline 52
 0038           ;       Delay_Nus(5);
 0038 05E0              ldi R16,5
 003A 10E0              ldi R17,0
 003C 00D0              rcall _Delay_Nus
 003E                   .dbline 53
 003E           ;       Init_Uart();
 003E E0DF              rcall _Init_Uart
 0040                   .dbline 54
 0040           ;       Delay_Nus(5);
 0040 05E0              ldi R16,5
 0042 10E0              ldi R17,0
 0044 00D0              rcall _Delay_Nus
 0046                   .dbline 55
 0046           ;       Init_Ch452lport();
 0046 00D0              rcall _Init_Ch452lport
 0048                   .dbline 56
 0048           ;       Delay_Nus(5);
 0048 05E0              ldi R16,5
 004A 10E0              ldi R17,0
 004C 00D0              rcall _Delay_Nus
 004E                   .dbline 57
 004E           ;       Init_Ch452lsystem();
 004E 00D0              rcall _Init_Ch452lsystem
 0050                   .dbline 58
 0050           ;       Delay_Nms(1500);
 0050 0CED              ldi R16,1500
 0052 15E0              ldi R17,5
 0054 00D0              rcall _Delay_Nms
 0056                   .dbline 59
 0056           ;       Display_Ch452lBCD(8,BCDdata);
 0056 20E0              ldi R18,<_BCDdata
 0058 30E0              ldi R19,>_BCDdata
 005A 08E0              ldi R16,8
 005C 00D0              rcall _Display_Ch452lBCD
 005E                   .dbline 60
 005E           ;       Delay_Nms(20);  //延时
 005E 04E1              ldi R16,20
 0060 10E0              ldi R17,0
 0062 00D0              rcall _Delay_Nms
 0064 14C0              rjmp L9
 0066           L8:
 0066                   .dbline 63
 0066           ;                       
 0066           ;       while(1)
 0066           ;       {
 0066                   .dbline 64
 0066           ;           if(flag==1)
 0066 80910000          lds R24,_flag
 006A 90910100          lds R25,_flag+1
 006E 8130              cpi R24,1
 0070 E0E0              ldi R30,0
 0072 9E07              cpc R25,R30
 0074 61F4              brne L11
 0076                   .dbline 65
 0076           ;               {
 0076                   .dbline 66
 0076           ;                   temp=Read_Keycode();
 0076 00D0              rcall _Read_Keycode
 0078 402F              mov R20,R16
 007A                   .dbline 67
 007A           ;                       Uart_Transmit(0x02);
 007A 02E0              ldi R16,2
 007C D0DF              rcall _Uart_Transmit
 007E                   .dbline 68
 007E           ;                       Uart_Transmit(temp);
 007E 042F              mov R16,R20
 0080 CEDF              rcall _Uart_Transmit
 0082                   .dbline 69
 0082           ;                       flag=0;
 0082 2224              clr R2
 0084 3324              clr R3
 0086 30920100          sts _flag+1,R3
 008A 20920000          sts _flag,R2
 008E                   .dbline 70
 008E           ;               }
 008E           L11:
 008E                   .dbline 98
 008E           L9:
 008E                   .dbline 62
 008E EBCF              rjmp L8
 0090           X0:
 0090                   .dbline -2
 0090           L7:
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym l i 1 c
 0092                   .dbsym r temp 20 c
 0092                   .dbend

⌨️ 快捷键说明

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