📄 uart.lis
字号:
.module Uart.c
.area vector(rom, abs)
.org 22
0016 00C0 rjmp _UartGet
.area data(ram, con, rel)
0000 _charInput::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile G:\Mega8程序\测试MegaOSCCAL\Uart.c
0001 .dbsym e charInput _charInput c
0001 L2:
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile G:\Mega8程序\测试MegaOSCCAL\Uart.c
.area text(rom, con, rel)
0000 .dbfile G:\Mega8程序\测试MegaOSCCAL\Uart.c
0000 .dbfunc e UartGet _UartGet fV
0000 .dbsym s cAddr L2 c
.even
0000 _UartGet::
0000 00D0 rcall push_lset
0002 .dbline -1
0002 .dbline 17
0002 .dbline 19
0002 2CB0 in R2,0xc
0004 20920000 sts _charInput,R2
0008 .dbline 20
0008 822D mov R24,R2
000A 8336 cpi R24,99
000C 49F4 brne L3
000E .dbline 21
000E .dbline 22
000E 80910100 lds R24,L2
0012 8F5F subi R24,255 ; addi 1
0014 80930100 sts L2,R24
0018 .dbline 23
0018 21B7 in R18,0x31
001A 082F mov R16,R24
001C 1127 clr R17
001E 00D0 rcall _rom_write
0020 .dbline 24
0020 L3:
0020 .dbline -2
0020 L1:
0020 00D0 rcall pop_lset
0022 .dbline 0 ; func end
0022 1895 reti
0024 .dbend
0024 .dbfunc e putchar _putchar fV
0024 ; c -> R16
.even
0024 _putchar::
0024 .dbline -1
0024 .dbline 28
0024 L6:
0024 .dbline 28
0024 L7:
0024 .dbline 28
0024 ; /*串口通信模块,使用之前,应该在Main 函数中对串口进行初始化,
0024 ; 串口数据接收方式采用中断进行,振荡频率修正参数不在EEPROM的
0024 ; 0x1ff0中,使用PonyProg可以测试得OSCCAL=0xA1*/
0024 ; #include <iom8v.h>
0024 ; #include <macros.h>
0024 ;
0024 ; extern void rom_write(unsigned int Address,unsigned char Data);
0024 ; extern unsigned rom_read(unsigned int Address);
0024 ;
0024 ; #define fosc 8000000 //晶振8MHZ
0024 ; #define baud 19200 //波特率
0024 ; //使用中断方式接收UART的输入字符
0024 ; #pragma interrupt_handler UartGet:12
0024 ;
0024 ; unsigned char charInput=0x00;
0024 ; void UartGet(void)
0024 ; {
0024 ; static char cAddr=0;
0024 ; charInput=UDR;
0024 ; if(charInput=='c')
0024 ; {
0024 ; cAddr++;
0024 ; rom_write(cAddr,OSCCAL);
0024 ; }
0024 ; }
0024 ;
0024 ; void putchar(unsigned char c)/* 字符输出函数 */
0024 ; {while (!(UCSRA&(1<<UDRE)));
0024 5D9B sbis 0xb,5
0026 FECF rjmp L6
0028 .dbline 29
0028 ; UDR=c;}
0028 0CB9 out 0xc,R16
002A .dbline -2
002A L5:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r c 16 c
002C .dbend
002C .dbfunc e getchar _getchar fc
.even
002C _getchar::
002C .dbline -1
002C .dbline 31
002C ; unsigned char getchar(void)/* 字符输入函数-查询方式 */
002C ; {
002C L10:
002C .dbline 32
002C L11:
002C .dbline 32
002C ; while(!(UCSRA& (1<<RXC)));
002C 5F9B sbis 0xb,7
002E FECF rjmp L10
0030 .dbline 33
0030 ; return UDR;
0030 0CB1 in R16,0xc
0032 .dbline -2
0032 L9:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
0034 .dbfunc e puts _puts fI
0034 ; s -> R20,R21
.even
0034 _puts::
0034 00D0 rcall push_gset1
0036 A801 movw R20,R16
0038 .dbline -1
0038 .dbline 37
0038 ; }
0038 ; /* 字符串输出函数 */
0038 ; int puts(char *s)
0038 ; {
0038 05C0 rjmp L15
003A L14:
003A .dbline 39
003A .dbline 40
003A FA01 movw R30,R20
003C 0081 ldd R16,z+0
003E F2DF rcall _putchar
0040 .dbline 41
0040 4F5F subi R20,255 ; offset = 1
0042 5F4F sbci R21,255
0044 .dbline 42
0044 L15:
0044 .dbline 38
0044 ; while (*s)
0044 FA01 movw R30,R20
0046 2080 ldd R2,z+0
0048 2220 tst R2
004A B9F7 brne L14
004C .dbline 43
004C ; {
004C ; putchar(*s);
004C ; s++;
004C ; }
004C ; return 1;
004C 01E0 ldi R16,1
004E 10E0 ldi R17,0
0050 .dbline -2
0050 L13:
0050 00D0 rcall pop_gset1
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r s 20 pc
0054 .dbend
0054 .dbfunc e uart_init _uart_init fV
.even
0054 _uart_init::
0054 .dbline -1
0054 .dbline 46
0054 ; }
0054 ; void uart_init(void)
0054 ; {
0054 .dbline 47
0054 ; UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//允许接收中断、发送和接收
0054 88E9 ldi R24,152
0056 8AB9 out 0xa,R24
0058 .dbline 50
0058 ; /*UBRRL=(fosc/16/(baud+1))%256;
0058 ; UBRRH=((fosc/16/(baud+1))/256)&0b01111111;*/
0058 ; UBRRL=(fosc/16/baud-1)%256;
0058 89E1 ldi R24,25
005A 89B9 out 0x9,R24
005C .dbline 51
005C ; UBRRH=((fosc/16/baud-1)/256)&0b01111111;
005C 2224 clr R2
005E 20BC out 0x20,R2
0060 .dbline 52
0060 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0060 86E8 ldi R24,134
0062 80BD out 0x20,R24
0064 .dbline -2
0064 L17:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -