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

📄 串口发送接收.lis

📁 ICCAVR_mega8_串口发送接收
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _串口发送接收.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_串口发送接收\串口发送接收.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //ICC-AVR application builder : 2009-3-11 14:28:07
 0000           ; // Target : M8
 0000           ; // Crystal: 8.0000Mhz
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 10
 0000           ;  PORTB = 0x00;
 0000 2224              clr R2
 0002 28BA              out 0x18,R2
 0004                   .dbline 11
 0004           ;  DDRB  = 0x00;
 0004 27BA              out 0x17,R2
 0006                   .dbline 12
 0006           ;  PORTC = 0x00; //m103 output only
 0006 25BA              out 0x15,R2
 0008                   .dbline 13
 0008           ;  DDRC  = 0x00;
 0008 24BA              out 0x14,R2
 000A                   .dbline 14
 000A           ;  PORTD = 0x00;
 000A 22BA              out 0x12,R2
 000C                   .dbline 15
 000C           ;  DDRD  = 0x00;
 000C 21BA              out 0x11,R2
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e init_devices _init_devices fV
                        .even
 0010           _init_devices::
 0010                   .dbline -1
 0010                   .dbline 20
 0010           ; }
 0010           ; 
 0010           ; //call this routine to initialize all peripherals
 0010           ; void init_devices(void)
 0010           ; {
 0010                   .dbline 22
 0010           ;  //stop errant interrupts until set up
 0010           ;  CLI(); //disable all interrupts
 0010 F894              cli
 0012                   .dbline 23
 0012           ;  port_init();
 0012 F6DF              rcall _port_init
 0014                   .dbline 25
 0014           ; 
 0014           ;  MCUCR = 0x00;
 0014 2224              clr R2
 0016 25BE              out 0x35,R2
 0018                   .dbline 26
 0018           ;  GICR  = 0x00;
 0018 2BBE              out 0x3b,R2
 001A                   .dbline 27
 001A           ;  TIMSK = 0x00; //timer interrupt sources
 001A 29BE              out 0x39,R2
 001C                   .dbline 28
 001C           ;  SEI(); //re-enable interrupts
 001C 7894              sei
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e delay _delay fV
 0020           ;              i -> R16,R17
                        .even
 0020           _delay::
 0020                   .dbline -1
 0020                   .dbline 38
 0020           ;  //all peripherals are now initialized
 0020           ; }
 0020           ; 
 0020           ; /************************************
 0020           ; Name         :小延时程序
 0020           ; Target       :atmega8
 0020           ; Crystal(晶振):8M
 0020           ; ************************************/
 0020           ; void delay()
 0020           ; {
 0020                   .dbline 40
 0020           ;  unsigned int i;//最大值65536
 0020           ;  for (i=0;i<40000;i++)
 0020 0027              clr R16
 0022 1127              clr R17
 0024 02C0              rjmp L7
 0026           L4:
 0026                   .dbline 41
 0026           ;  {;}
 0026                   .dbline 41
 0026                   .dbline 41
 0026           L5:
 0026                   .dbline 40
 0026 0F5F              subi R16,255  ; offset = 1
 0028 1F4F              sbci R17,255
 002A           L7:
 002A                   .dbline 40
 002A 80E4              ldi R24,64
 002C 9CE9              ldi R25,156
 002E A0E0              ldi R26,0
 0030 B0E0              ldi R27,0
 0032 1801              movw R2,R16
 0034 4424              clr R4
 0036 5524              clr R5
 0038 2816              cp R2,R24
 003A 3906              cpc R3,R25
 003C 4A06              cpc R4,R26
 003E 5B06              cpc R5,R27
 0040 94F3              brlt L4
 0042           X0:
 0042                   .dbline -2
 0042           L3:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r i 16 i
 0044                   .dbend
 0044                   .dbfunc e init_uart _init_uart fV
                        .even
 0044           _init_uart::
 0044                   .dbline -1
 0044                   .dbline 55
 0044           ; }
 0044           ; 
 0044           ; /***********************************************************
 0044           ; 用    途:串口发送接收程序
 0044           ; Taget   :mega8
 0044           ; crystal :8M
 0044           ; 介    绍:
 0044           ; **********************************************************/
 0044           ; //晶振和波特率
 0044           ; #define fosc 8000000
 0044           ; #define baud 9600
 0044           ; //UART初始化函数
 0044           ; void init_uart()
 0044           ; {
 0044                   .dbline 56
 0044           ;  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许收发,打开接收中断
 0044 88E9              ldi R24,152
 0046 8AB9              out 0xa,R24
 0048                   .dbline 57
 0048           ;  UBRRL=(fosc/16/(baud+1))%256;//设置波特率寄存器
 0048 84E3              ldi R24,52
 004A 89B9              out 0x9,R24
 004C                   .dbline 58
 004C           ;  UBRRH=(fosc/16/(baud+1))/256;
 004C 2224              clr R2
 004E 20BC              out 0x20,R2
 0050                   .dbline 59
 0050           ;  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP
 0050 86E8              ldi R24,134
 0052 80BD              out 0x20,R24
 0054                   .dbline -2
 0054           L8:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbend
 0056                   .dbfunc e uart_putchar _uart_putchar fV
 0056           ;              c -> R16
                        .even
 0056           _uart_putchar::
 0056                   .dbline -1
 0056                   .dbline 63
 0056           ; }
 0056           ; //字符输出
 0056           ; void uart_putchar(unsigned char c)
 0056           ; {
 0056           L10:
 0056                   .dbline 64
 0056           ;  while(!(UCSRA&(1<<UDRE)));//上次发送有没有完成
 0056           L11:
 0056                   .dbline 64
 0056 5D9B              sbis 0xb,5
 0058 FECF              rjmp L10
 005A           X1:
 005A                   .dbline 65
 005A           ;  UDR=c;
 005A 0CB9              out 0xc,R16
 005C                   .dbline -2
 005C           L9:
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r c 16 c
 005E                   .dbend
 005E                   .dbfunc e uart_getchar _uart_getchar fc
                        .even
 005E           _uart_getchar::
 005E                   .dbline -1
 005E                   .dbline 69
 005E           ; }
 005E           ; //字符输入
 005E           ; unsigned char uart_getchar()
 005E           ; {
 005E           L14:
 005E                   .dbline 70
 005E           ;  while(!(UCSRA&(1<<RXC))){;}//有没有接收到数据
 005E                   .dbline 70
 005E                   .dbline 70
 005E           L15:
 005E                   .dbline 70
 005E 5F9B              sbis 0xb,7
 0060 FECF              rjmp L14
 0062           X2:
 0062                   .dbline 71
 0062           ;  return UDR;
 0062 0CB1              in R16,0xc
 0064                   .dbline -2
 0064           L13:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend
 0066                   .dbfunc e uart_print _uart_print fI
 0066           ;              s -> R20,R21
                        .even

⌨️ 快捷键说明

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