📄 串口发送接收.lis
字号:
.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 + -