📄 lesson10.lis
字号:
.module lesson10.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
.area vector(rom, abs)
.org 36
0024 57C0 rjmp _uart_rx
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
0001 .dbsym e flag _flag c
0001 _Data_Len::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
0002 .dbsym e Data_Len _Data_Len c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_xgsetF000
0002 .dbline -1
0002 .dbline 16
0002 ; #include <iom88v.h>
0002 ; #include <macros.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ;
0002 ; //晶振 7.3728MHZ
0002 ; #define mclk 7372800
0002 ; // #pragma interrupt_handler uart_rx:12
0002 ; #pragma interrupt_handler uart_rx:iv_USART0_RXC
0002 ; uchar rdata,flag=0;
0002 ; uchar Rec_Data[27];
0002 ; uchar Data_Len =0,i;
0002 ; uchar adcL,adcH;
0002 ; uint adresult;
0002 ; void delay(uint ms) //延时函数
0002 ; {
0002 .dbline 18
0002 ; uint i,j;
0002 ; for(i=0;i<ms;i++)
0002 4427 clr R20
0004 5527 clr R21
0006 0BC0 rjmp L5
0008 L2:
0008 .dbline 19
0008 ; {
0008 .dbline 20
0008 ; for(j=0;j<1100;j++);
0008 6627 clr R22
000A 7727 clr R23
000C 02C0 rjmp L9
000E L6:
000E .dbline 20
000E L7:
000E .dbline 20
000E 6F5F subi R22,255 ; offset = 1
0010 7F4F sbci R23,255
0012 L9:
0012 .dbline 20
0012 6C34 cpi R22,76
0014 E4E0 ldi R30,4
0016 7E07 cpc R23,R30
0018 D0F3 brlo L6
001A X0:
001A .dbline 21
001A ; }
001A L3:
001A .dbline 18
001A 4F5F subi R20,255 ; offset = 1
001C 5F4F sbci R21,255
001E L5:
001E .dbline 18
001E 4017 cp R20,R16
0020 5107 cpc R21,R17
0022 90F3 brlo L2
0024 X1:
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 00C0 rjmp pop_xgsetF000
0026 .dbsym r i 20 i
0026 .dbsym r j 22 i
0026 .dbsym r ms 16 i
0026 .dbend
0026 .dbfunc e uart_init _uart_init fV
0026 ; baud -> R10,R11
.even
0026 _uart_init::
0026 00D0 rcall push_xgsetF00C
0028 5801 movw R10,R16
002A .dbline -1
002A .dbline 27
002A ; }
002A ;
002A ; //0D 0A 3E 0D 0A 52 65 61 64 20 46 77 64 20 33 3E 0D 0A 20 39 33 31 36 37 3F 20 20
002A ; //0D 0A 3E 0D 0A 52 65 61 64 20 46 6C 6F 77 20 31 3E 0D 0A 20 35 34 2E 39 32 30 3F 20 20
002A ; void uart_init(uint baud) //串口初始化
002A ; {
002A .dbline 29
002A ;
002A ; UCSR0B=0x00;
002A 2224 clr R2
002C 2092C100 sts 193,R2
0030 .dbline 30
0030 ; UCSR0A=0x00; //控制寄存器清零
0030 2092C000 sts 192,R2
0034 .dbline 31
0034 ; UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
0034 86E0 ldi R24,6
0036 8093C200 sts 194,R24
003A .dbline 34
003A ; //选择UCSRC,异步模式,禁止
003A ; // 校验,1位停止位,8位数据位
003A ; baud=mclk/16/baud-1 ; //波特率最大为65K
003A 1501 movw R2,R10
003C 4424 clr R4
003E 5524 clr R5
0040 40E0 ldi R20,0
0042 58E0 ldi R21,8
0044 67E0 ldi R22,7
0046 70E0 ldi R23,0
0048 5A92 st -y,R5
004A 4A92 st -y,R4
004C 3A92 st -y,R3
004E 2A92 st -y,R2
0050 8A01 movw R16,R20
0052 9B01 movw R18,R22
0054 00D0 rcall div32s
0056 41E0 ldi R20,1
0058 50E0 ldi R21,0
005A 60E0 ldi R22,0
005C 70E0 ldi R23,0
005E 1801 movw R2,R16
0060 2901 movw R4,R18
0062 241A sub R2,R20
0064 350A sbc R3,R21
0066 460A sbc R4,R22
0068 570A sbc R5,R23
006A 5101 movw R10,R2
006C .dbline 35
006C ; UBRR0L=baud;
006C A092C400 sts 196,R10
0070 .dbline 36
0070 ; UBRR0H=baud>>8; //设置波特率
0070 232C mov R2,R3
0072 3324 clr R3
0074 2092C500 sts 197,R2
0078 .dbline 37
0078 ; UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);
0078 88E9 ldi R24,152
007A 8093C100 sts 193,R24
007E .dbline 39
007E ; //接收、发送使能,接收中断使能
007E ; SREG=BIT(7); //全局中断开放
007E 80E8 ldi R24,128
0080 8FBF out 0x3f,R24
0082 .dbline 40
0082 ; DDRD|=0X02; //配置TX为输出(很重要)
0082 519A sbi 0xa,1
0084 .dbline -2
0084 L10:
0084 .dbline 0 ; func end
0084 00C0 rjmp pop_xgsetF00C
0086 .dbsym r baud 10 i
0086 .dbend
0086 .dbfunc e adc_init _adc_init fV
.even
0086 _adc_init::
0086 .dbline -1
0086 .dbline 45
0086 ;
0086 ; }
0086 ;
0086 ; void adc_init(void)
0086 ; {
0086 .dbline 46
0086 ; ADCSRA = 0x00; //disable adc
0086 2224 clr R2
0088 20927A00 sts 122,R2
008C .dbline -2
008C L11:
008C .dbline 0 ; func end
008C 0895 ret
008E .dbend
008E .dbfunc e uart_sendB _uart_sendB fV
008E ; data -> R16
.even
008E _uart_sendB::
008E .dbline -1
008E .dbline 50
008E ; //ADMUX = 0x46; //选择AVCC为参考,采集电压右对齐,1110 1.1V
008E ; }
008E ; void uart_sendB(uchar data) //发送字符
008E ; {
008E L13:
008E .dbline 51
008E ; while(!(UCSR0A&(BIT(UDRE0)))) ;
008E L14:
008E .dbline 51
008E 2090C000 lds R2,192
0092 25FE sbrs R2,5
0094 FCCF rjmp L13
0096 X2:
0096 .dbline 52
0096 ; UDR0=data;
0096 0093C600 sts 198,R16
009A L16:
009A .dbline 53
009A ; while(!(UCSR0A&(BIT(TXC0))));
009A L17:
009A .dbline 53
009A 2090C000 lds R2,192
009E 26FE sbrs R2,6
00A0 FCCF rjmp L16
00A2 X3:
00A2 .dbline 54
00A2 ; UCSR0A|=BIT(TXC0);
00A2 8091C000 lds R24,192
00A6 8064 ori R24,64
00A8 8093C000 sts 192,R24
00AC .dbline -2
00AC L12:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r data 16 c
00AE .dbend
00AE .dbfunc e uart_rx _uart_rx fV
.even
00AE _uart_rx::
00AE 2A92 st -y,R2
00B0 8A93 st -y,R24
00B2 9A93 st -y,R25
00B4 2FB6 in R2,0x3f
00B6 2A92 st -y,R2
00B8 .dbline -1
00B8 .dbline 57
00B8 ; }
00B8 ; void uart_rx() //接收字符
00B8 ; {
00B8 .dbline 58
00B8 ; UCSR0B&=~BIT(RXCIE0);
00B8 8091C100 lds R24,193
00BC 8F77 andi R24,127
00BE 8093C100 sts 193,R24
00C2 .dbline 59
00C2 ; rdata=UDR0;
00C2 2090C600 lds R2,198
00C6 20922000 sts _rdata,R2
00CA .dbline 61
00CA ; //flag=1;
00CA ; Data_Len++;
00CA 80910100 lds R24,_Data_Len
00CE 8F5F subi R24,255 ; addi 1
00D0 80930100 sts _Data_Len,R24
00D4 .dbline 62
00D4 ; UCSR0B|=BIT(RXCIE0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -