?? 串口通信.lis
字號:
.module _串口通信.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信/delay.h
0000 .dbfunc e DelayUS _DelayUS fV
0000 ; time -> R16,R17
.even
0000 _DelayUS::
0000 .dbline -1
0000 .dbline 9
0000 ; //內部晶振 8M
0000 ; #include <ioM16v.h>
0000 ; #include <macros.h>
0000 ; #include"delay.h"
0000 ;
0000 ;
0000 ;
0000 ; /*------宏定義------*/
0000 ; #define uchar unsigned char
0000 02C0 xjmp L3
0002 L2:
0002 .dbline 11
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 L3:
0006 .dbline 10
0006 ; #define uint unsigned int
0006 81E0 ldi R24,1
0008 90E0 ldi R25,0
000A 8017 cp R24,R16
000C 9107 cpc R25,R17
000E C8F3 brlo L2
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r time 16 i
0012 .dbend
0012 .dbfunc e DelayMS _DelayMS fV
0012 ; i -> R20,R21
0012 ; time -> R16,R17
.even
0012 _DelayMS::
0012 0E940000 xcall push_gset1
0016 .dbline -1
0016 .dbline 20
0016 ;
0016 ;
0016 ;
0016 ; //端口初始化
0016 ; void port_init(void)
0016 ; {
0016 ; PORTA = 0x00;//設置端口方向、數據
0016 ; DDRA = 0x00;
0016 ; PORTB = 0x00;
0016 ; DDRB = 0x00;
0016 09C0 xjmp L7
0018 L6:
0018 .dbline 23
0018 ; PORTC = 0x00;
0018 ; DDRC = 0x00;
0018 ; PORTD = 0x00;
0018 .dbline 24
0018 ; DDRD = 0x03;
0018 41E0 ldi R20,1
001A 50E0 ldi R21,0
001C 02C0 xjmp L12
001E L9:
001E .dbline 25
001E L10:
001E .dbline 24
001E 4F5F subi R20,255 ; offset = 1
0020 5F4F sbci R21,255
0022 L12:
0022 .dbline 24
0022 4637 cpi R20,118
0024 E4E0 ldi R30,4
0026 5E07 cpc R21,R30
0028 D0F3 brlo L9
002A .dbline 26
002A L7:
002A .dbline 22
002A 1801 movw R2,R16
002C 0150 subi R16,1
002E 1040 sbci R17,0
0030 2220 tst R2
0032 91F7 brne L6
0034 3320 tst R3
0036 81F7 brne L6
0038 X0:
0038 .dbline -2
0038 L5:
0038 0E940000 xcall pop_gset1
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r i 20 i
003E .dbsym r time 16 i
003E .dbend
003E .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信\串口通信.c
003E .dbfunc e port_init _port_init fV
.even
003E _port_init::
003E .dbline -1
003E .dbline 16
003E .dbline 17
003E 2224 clr R2
0040 2BBA out 0x1b,R2
0042 .dbline 18
0042 2ABA out 0x1a,R2
0044 .dbline 19
0044 28BA out 0x18,R2
0046 .dbline 20
0046 27BA out 0x17,R2
0048 .dbline 21
0048 25BA out 0x15,R2
004A .dbline 22
004A 24BA out 0x14,R2
004C .dbline 23
004C 22BA out 0x12,R2
004E .dbline 24
004E 83E0 ldi R24,3
0050 81BB out 0x11,R24
0052 .dbline -2
0052 L13:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 .dbfunc e usart_init _usart_init fV
.even
0054 _usart_init::
0054 .dbline -1
0054 .dbline 30
0054 ; }
0054 ;
0054 ;
0054 ; //串口通信初始化
0054 ; void usart_init(void)
0054 ; {
0054 .dbline 31
0054 ; UCSRB = 0x00;//禁止中斷
0054 2224 clr R2
0056 2AB8 out 0xa,R2
0058 .dbline 32
0058 ; UCSRA = 0x00;//數據發送、接受位、數據幀錯誤、奇偶校驗、溢出、多機模式
0058 2BB8 out 0xb,R2
005A .dbline 33
005A ; UCSRC = BIT(URSEL) | 0x06;//使用UBRRH寄存器、數據位數8位
005A 86E8 ldi R24,134
005C 80BD out 0x20,R24
005E .dbline 34
005E ; UBRRL = 0x19;//設置波特率
005E 89E1 ldi R24,25
0060 89B9 out 0x9,R24
0062 .dbline 35
0062 ; UBRRH = 0x00;
0062 20BC out 0x20,R2
0064 .dbline 36
0064 ; UCSRB = 0x98;//接受中斷使能、接受、發送使能、不使用第9數據位
0064 88E9 ldi R24,152
0066 8AB9 out 0xa,R24
0068 .dbline -2
0068 L14:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
006A .dbfunc e uart_putchar _uart_putchar fV
006A ; x -> R16
.even
006A _uart_putchar::
006A .dbline -1
006A .dbline 39
006A ; }
006A ; void uart_putchar(char x)
006A ; {
006A L16:
006A .dbline 41
006A L17:
006A .dbline 40
006A ; while (!(UCSRA&0x20))//查詢發送區是否為空
006A 5D9B sbis 0xb,5
006C FECF rjmp L16
006E .dbline 42
006E ; ;
006E ; UDR=x; //發送數據
006E 0CB9 out 0xc,R16
0070 .dbline -2
0070 L15:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r x 16 c
0072 .dbend
.area vector(rom, abs)
.org 44
002C 0C943900 jmp _usart_rx_isr
.area text(rom, con, rel)
0072 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信\串口通信.c
0072 .dbfunc e usart_rx_isr _usart_rx_isr fV
0072 ; y -> R20
.even
0072 _usart_rx_isr::
0072 0E940000 xcall push_lset
0076 0E940000 xcall push_gset1
007A .dbline -1
007A .dbline 48
007A ; }
007A ;
007A ; //串行接收結束中斷服務程序
007A ; #pragma interrupt_handler usart_rx_isr:12
007A ; void usart_rx_isr(void)
007A ; {
007A .dbline 50
007A ; char y;
007A ; y=UDR;
007A 4CB1 in R20,0xc
007C .dbline 51
007C ; uart_putchar(y);//把接收到的數據返回給上位機
007C 042F mov R16,R20
007E F5DF xcall _uart_putchar
0080 .dbline -2
0080 L19:
0080 0E940000 xcall pop_gset1
0084 0E940000 xcall pop_lset
0088 .dbline 0 ; func end
0088 1895 reti
008A .dbsym r y 20 c
008A .dbend
008A .dbfunc e init_devices _init_devices fV
.even
008A _init_devices::
008A .dbline -1
008A .dbline 56
008A ; }
008A ;
008A ;
008A ; void init_devices(void)
008A ; {
008A .dbline 57
008A ; CLI(); //禁止所有中斷
008A F894 cli
008C .dbline 58
008C ; MCUCR = 0x00;//INT0、INT1中斷觸發方式
008C 2224 clr R2
008E 25BE out 0x35,R2
0090 .dbline 59
0090 ; MCUCSR = 0x80;//禁止JTAG
0090 80E8 ldi R24,128
0092 84BF out 0x34,R24
0094 .dbline 60
0094 ; GICR = 0x00;//外部中斷使能
0094 2BBE out 0x3b,R2
0096 .dbline 61
0096 ; port_init();
0096 D3DF xcall _port_init
0098 .dbline 62
0098 ; usart_init();
0098 DDDF xcall _usart_init
009A .dbline 63
009A ; SEI();//開全局中斷
009A 7894 sei
009C .dbline -2
009C L20:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbend
009E .dbfunc e main _main fV
.even
009E _main::
009E .dbline -1
009E .dbline 67
009E ; }
009E ; //主函數
009E ; void main(void)
009E ; {
009E .dbline 68
009E ; init_devices();
009E F5DF xcall _init_devices
00A0 01C0 xjmp L23
00A2 L22:
00A2 .dbline 71
00A2 .dbline 72
00A2 0000 nop
00A4 .dbline 73
00A4 L23:
00A4 .dbline 70
00A4 FECF xjmp L22
00A6 X1:
00A6 .dbline -2
00A6 L21:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -