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

📄 uart_atmega8.lis

📁 AVR单片机的T_TO_TWI通讯方式
💻 LIS
字号:
                        .module uart_atmega8.c
                        .area text(rom, con, rel)
 0000                   .dbfile H:\UART_TO_TWI\uart_atmega8.c
 0000                   .dbfunc e main _main fV
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 29
 0000           ; /*****************************************************************
 0000           ; ICC-AVR application builder : 2005-8-19 14:40:53
 0000           ;  Target : M8
 0000           ;  Crystal: 7.3728Mhz
 0000           ; // Crystal: 4.6080Mhz
 0000           ; 
 0000           ; 实验:做usart串行通讯实验
 0000           ; 目的:了解及会使用usart串口
 0000           ; CPU:atmega8L
 0000           ; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
 0000           ;                其中:UBRRH和UCSRC共用一个地址
 0000           ; ******************************************************************/
 0000           ; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include "usart_m8.h"
 0000           ; #include "twi.h"
 0000           ; 
 0000           ; void check_I2C(void);
 0000           ; void init_data(void);
 0000           ; void port_init(void);
 0000           ; void init_devices(void);
 0000           ; void check_watchdog(void);
 0000           ; void process_data_pack(void);
 0000           ; void watchdog_init(void);
 0000           ; 
 0000           ; 
 0000           ; void main(void)
 0000           ; {
 0000                   .dbline 30
 0000           ;       init_devices();
 0000 33D0              rcall _init_devices
 0002                   .dbline 31
 0002           ;       init_data();
 0002 26D0              rcall _init_data
 0004 06C0              rjmp L3
 0006           L2:
 0006                   .dbline 34
 0006                   .dbline 35
 0006 1CD0              rcall _check_I2C
 0008                   .dbline 36
 0008 00E0              ldi R16,<L5
 000A 10E0              ldi R17,>L5
 000C 00D0              rcall _USART_Transmit
 000E                   .dbline 37
 000E 03D0              rcall _process_data_pack
 0010                   .dbline 38
 0010 36D0              rcall _check_watchdog
 0012                   .dbline 39
 0012           L3:
 0012                   .dbline 33
 0012 F9CF              rjmp L2
 0014           X0:
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
 0016                   .dbfunc e process_data_pack _process_data_pack fV
                        .even
 0016           _process_data_pack::
 0016                   .dbline -1
 0016                   .dbline 43
 0016           ;   
 0016           ;       while(1)  //forever
 0016           ;          {
 0016           ;             check_I2C();
 0016           ;                 USART_Transmit( "我是中国人" );
 0016           ;             process_data_pack();
 0016           ;                 check_watchdog();//喂狗
 0016           ;        }
 0016           ; }
 0016           ; //解包
 0016           ; void process_data_pack(void)
 0016           ; {
 0016                   .dbline 44
 0016           ;    if(Rx_Over_Pack_Flag == true)
 0016 80910000          lds R24,_Rx_Over_Pack_Flag
 001A 8130              cpi R24,1
 001C 81F4              brne L7
 001E                   .dbline 45
 001E           ;     {
 001E                   .dbline 46
 001E           ;               if((UART_RX_buff[1] == 0x57)&&(UART_RX_buff[8] == 0x58))
 001E 80910100          lds R24,_UART_RX_buff+1
 0022 8735              cpi R24,87
 0024 21F4              brne L9
 0026 80910800          lds R24,_UART_RX_buff+8
 002A 8835              cpi R24,88
 002C 01F4              brne L9
 002E                   .dbline 47
 002E           ;               {
 002E                   .dbline 49
 002E           ;                 
 002E           ;               }
 002E           L9:
 002E                   .dbline 50
 002E           ;               if((UART_RX_buff[1] == 0x52)&&(UART_RX_buff[8] == 0x58))
 002E 80910100          lds R24,_UART_RX_buff+1
 0032 8235              cpi R24,82
 0034 21F4              brne L13
 0036 80910800          lds R24,_UART_RX_buff+8
 003A 8835              cpi R24,88
 003C 01F4              brne L13
 003E                   .dbline 51
 003E           ;               {
 003E                   .dbline 53
 003E           ;                
 003E           ;               }
 003E           L13:
 003E                   .dbline 54
 003E           L7:
 003E                   .dbline -2
 003E           L6:
 003E                   .dbline 0 ; func end
 003E 0895              ret
 0040                   .dbend
 0040                   .dbfunc e check_I2C _check_I2C fV
 0040           ;            dat -> <dead>
                        .even
 0040           _check_I2C::
 0040                   .dbline -1
 0040                   .dbline 59
 0040                   .dbline 62
 0040 80910000          lds R24,_Mem_Write_Flag
 0044 8130              cpi R24,1
 0046 19F4              brne L18
 0048                   .dbline 63
 0048                   .dbline 64
 0048 2224              clr R2
 004A 20920000          sts _Mem_Write_Flag,R2
 004E                   .dbline 66
 004E                   .dbline 67
 004E           L18:
 004E                   .dbline -2
 004E           L17:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbsym l dat 1 c
 0050                   .dbend
 0050                   .dbfunc e init_data _init_data fV
                        .even
 0050           _init_data::
 0050                   .dbline -1
 0050                   .dbline 71
 0050           ;       }
 0050           ; }
 0050           ; 
 0050           ; 
 0050           ; void check_I2C(void)
 0050           ; {
 0050           ;       unsigned char dat;
 0050           ;       
 0050           ;       if(Mem_Write_Flag == true)
 0050           ;       {
 0050           ;               Mem_Write_Flag = false;                   
 0050           ; 
 0050           ;               ;
 0050           ;       }       
 0050           ; }
 0050           ; 
 0050           ; void init_data(void)
 0050           ; {
 0050                   .dbline 72
 0050           ;  ;// Rx_Flag    = false;
 0050                   .dbline -2
 0050           L20:
 0050                   .dbline 0 ; func end
 0050 0895              ret
 0052                   .dbend
 0052                   .dbfunc e port_init _port_init fV
                        .even
 0052           _port_init::
 0052                   .dbline -1
 0052                   .dbline 75
 0052           ; }
 0052           ; void port_init(void)
 0052           ; {
 0052                   .dbline 76
 0052           ;  PORTB = 0x3F;
 0052 8FE3              ldi R24,63
 0054 88BB              out 0x18,R24
 0056                   .dbline 77
 0056           ;  DDRB  = 0x00;
 0056 2224              clr R2
 0058 27BA              out 0x17,R2
 005A                   .dbline 78
 005A           ;  PORTC = 0x4F; //m103 output only
 005A 8FE4              ldi R24,79
 005C 85BB              out 0x15,R24
 005E                   .dbline 79
 005E           ;  DDRC  = 0x00;
 005E 24BA              out 0x14,R2
 0060                   .dbline 80
 0060           ;  PORTD = 0xFC;
 0060 8CEF              ldi R24,252
 0062 82BB              out 0x12,R24
 0064                   .dbline 81
 0064           ;  DDRD  = 0x00;
 0064 21BA              out 0x11,R2
 0066                   .dbline -2
 0066           L21:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbend
 0068                   .dbfunc e init_devices _init_devices fV
                        .even
 0068           _init_devices::
 0068                   .dbline -1
 0068                   .dbline 85
 0068           ; }
 0068           ; //call this routine to initialize all peripherals
 0068           ; void init_devices(void)
 0068           ; {
 0068                   .dbline 87
 0068           ;  //stop errant interrupts until set up
 0068           ;  CLI(); //disable all interrupts
 0068 F894              cli
 006A                   .dbline 88
 006A           ;  port_init();
 006A F3DF              rcall _port_init
 006C                   .dbline 89
 006C           ;  uart0_init();
 006C 00D0              rcall _uart0_init
 006E                   .dbline 90
 006E           ;  twi_init();
 006E 00D0              rcall _twi_init
 0070                   .dbline 91
 0070           ;  watchdog_init();
 0070 08D0              rcall _watchdog_init
 0072                   .dbline 93
 0072           ; 
 0072           ;  MCUCR = 0x00;
 0072 2224              clr R2
 0074 25BE              out 0x35,R2
 0076                   .dbline 94
 0076           ;  GICR  = 0x00;
 0076 2BBE              out 0x3b,R2
 0078                   .dbline 95
 0078           ;  TIMSK = 0x00; //timer interrupt sources
 0078 29BE              out 0x39,R2
 007A                   .dbline 96
 007A           ;  SEI(); //re-enable interrupts
 007A 7894              sei
 007C                   .dbline -2
 007C           L22:
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbend
 007E                   .dbfunc e check_watchdog _check_watchdog fV
                        .even
 007E           _check_watchdog::
 007E                   .dbline -1
 007E                   .dbline 100
 007E           ;  //all peripherals are now initialized
 007E           ; }
 007E           ; void check_watchdog(void)
 007E           ; {
 007E                   .dbline 101
 007E           ;       WDR();//喂狗
 007E A895              wdr
 0080                   .dbline -2
 0080           L23:
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbend
 0082                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0082           _watchdog_init::
 0082                   .dbline -1
 0082                   .dbline 104
 0082           ; }
 0082           ; void watchdog_init(void)
 0082           ; {
 0082                   .dbline 105
 0082           ;  WDR();//看门狗计数清零
 0082 A895              wdr
 0084                   .dbline 106
 0084           ;  WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
 0084 8DE0              ldi R24,13
 0086 81BD              out 0x21,R24
 0088                   .dbline -2
 0088           L24:
 0088                   .dbline 0 ; func end
 0088 0895              ret
 008A                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile H:\UART_TO_TWI\uart_atmega8.c
 0000           L5:
 0000                   .blkb 11
                        .area idata
 0000 CED2CAC7D6D0B9FAC8CB00    .byte 206,210,202,199,214,208,185,250,200,203,0
                        .area data(ram, con, rel)
 000B                   .dbfile H:\UART_TO_TWI\uart_atmega8.c

⌨️ 快捷键说明

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