📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
0000 .dbfunc e Delay_us _Delay_us fV
0000 ; time -> R16,R17
.even
0000 _Delay_us::
0000 .dbline -1
0000 .dbline 12
0000 ; //ICC-AVR application builder : 2006-6-20 9:25:59
0000 ; // Target : M16
0000 ; // Crystal: 1Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "main.h"
0000 ;
0000 ; uint8 Buffer;
0000 ;
0000 ; void Delay_us(unsigned int time)
0000 ; {
0000 L2:
0000 .dbline 13
0000 L3:
0000 .dbline 13
0000 ; while(time--);
0000 1801 movw R2,R16
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 2220 tst R2
0008 D9F7 brne L2
000A 3320 tst R3
000C C9F7 brne L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 i
0010 .dbend
0010 .dbfunc e Delay_ms _Delay_ms fV
0010 ; time -> R20,R21
.even
0010 _Delay_ms::
0010 0E940000 xcall push_gset1
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 17
0016 ; }
0016 ;
0016 ; void Delay_ms(unsigned int time)
0016 ; {
0016 03C0 xjmp L7
0018 L6:
0018 .dbline 19
0018 .dbline 20
0018 00E1 ldi R16,10000
001A 17E2 ldi R17,39
001C F1DF xcall _Delay_us
001E .dbline 21
001E L7:
001E .dbline 18
001E ; while(time--)
001E 1A01 movw R2,R20
0020 4150 subi R20,1
0022 5040 sbci R21,0
0024 2220 tst R2
0026 C1F7 brne L6
0028 3320 tst R3
002A B1F7 brne L6
002C X1:
002C .dbline -2
002C L5:
002C 0E940000 xcall pop_gset1
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r time 20 i
0032 .dbend
0032 .dbfunc e main _main fV
.even
0032 _main::
0032 .dbline -1
0032 .dbline 24
0032 ; {
0032 ; Delay_us(10000);
0032 ; }
0032 ; }
0032 ; void main(void)
0032 ; {
0032 .dbline 25
0032 ; Delay_ms(1);
0032 01E0 ldi R16,1
0034 10E0 ldi R17,0
0036 ECDF xcall _Delay_ms
0038 .dbline 26
0038 ; SPI_SS_IN;
0038 BC98 cbi 0x17,4
003A .dbline 26
003A C49A sbi 0x18,4
003C .dbline 26
003C .dbline 27
003C ; SPI_DO_OUT;
003C BD9A sbi 0x17,5
003E .dbline 27
003E .dbline 28
003E ; SPI_DI_IN;
003E BE98 cbi 0x17,6
0040 .dbline 28
0040 C69A sbi 0x18,6
0042 .dbline 28
0042 .dbline 29
0042 ; SPI_CLK_IN;
0042 BF98 cbi 0x17,7
0044 .dbline 29
0044 C79A sbi 0x18,7
0046 .dbline 29
0046 .dbline 31
0046 ;
0046 ; uart_init(); //TART初始化
0046 0AD0 xcall _uart_init
0048 .dbline 32
0048 ; SEI(); //全局中断使能
0048 7894 sei
004A .dbline 35
004A ;
004A ;
004A ; for(;;)
004A L10:
004A .dbline 36
004A .dbline 37
004A B49B sbis 0x16,4
004C FECF rjmp L10
004E .dbline 38
004E .dbline 40
004E 00EF ldi R16,240
0050 16D0 xcall _Spi_Send
0052 00930000 sts _Buffer,R16
0056 .dbline 42
0056 0BD0 xcall _USART_TXD
0058 .dbline 43
0058 .dbline 44
0058 .dbline 35
0058 .dbline 35
0058 F8CF xjmp L10
005A X2:
005A .dbline -2
005A L9:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbend
005C .dbfunc e uart_init _uart_init fV
.even
005C _uart_init::
005C .dbline -1
005C .dbline 49
005C ; {
005C ; if(SS)
005C ; {
005C ;
005C ; Buffer=Spi_Send(0XF0);
005C ;
005C ; USART_TXD(Buffer);
005C ; }
005C ; }
005C ; }
005C ;
005C ; //===============================================================
005C ; void uart_init(void) //UART初始化
005C ; {
005C .dbline 52
005C ; //设置侦格式
005C ; //异步,8位数据,无奇偶校验,一个停止位,无倍速
005C ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
005C 86E8 ldi R24,134
005E 80BD out 0x20,R24
0060 .dbline 55
0060 ;
0060 ; //设置波特率
0060 ; UBRRL= (F_osc/Baud_rate/16-1)%256;
0060 89E1 ldi R24,25
0062 89B9 out 0x9,R24
0064 .dbline 56
0064 ; UBRRH= (F_osc/Baud_rate/16-1)/256;
0064 2224 clr R2
0066 20BC out 0x20,R2
0068 .dbline 59
0068 ;
0068 ; //使能接收中断,使能接收,使能发送
0068 ; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
0068 88E9 ldi R24,152
006A 8AB9 out 0xa,R24
006C .dbline -2
006C L16:
006C .dbline 0 ; func end
006C 0895 ret
006E .dbend
006E .dbfunc e USART_TXD _USART_TXD fV
006E ; data -> R16
.even
006E _USART_TXD::
006E .dbline -1
006E .dbline 65
006E ; }
006E ;
006E ;
006E ; //===============================================================
006E ; void USART_TXD(uint8 data) //发送采用查询方式
006E ; {
006E L18:
006E .dbline 66
006E L19:
006E .dbline 66
006E ; while( !(UCSRA & BIT(UDRE)) );
006E 5D9B sbis 0xb,5
0070 FECF rjmp L18
0072 .dbline 67
0072 ; UDR=data;
0072 0CB9 out 0xc,R16
0074 L21:
0074 .dbline 68
0074 L22:
0074 .dbline 68
0074 ; while( !(UCSRA & BIT(TXC )) );
0074 5E9B sbis 0xb,6
0076 FECF rjmp L21
0078 .dbline 69
0078 ; UCSRA|=BIT(TXC);
0078 5E9A sbi 0xb,6
007A .dbline -2
007A L17:
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r data 16 c
007C .dbend
.area vector(rom, abs)
.org 44
002C 0C943E00 jmp _USART_RXC
.area text(rom, con, rel)
007C .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
007C .dbfunc e USART_RXC _USART_RXC fV
.even
007C _USART_RXC::
007C .dbline -1
007C .dbline 76
007C ; }
007C ;
007C ; //=======================================================================
007C ;
007C ; #pragma interrupt_handler USART_RXC:12
007C ; void USART_RXC(void)
007C ; {
007C .dbline -2
007C L24:
007C .dbline 0 ; func end
007C 1895 reti
007E .dbend
007E .dbfunc e Spi_Send _Spi_Send fc
007E ; temp -> R20
007E ; i -> R22
007E ; dat -> R16
.even
007E _Spi_Send::
007E 0E940000 xcall push_gset2
0082 .dbline -1
0082 .dbline 87
0082 ;
0082 ; }
0082 ;
0082 ; //*****************************************************************************************
0082 ; //函数名:Spi_send(uint8 dat)
0082 ; //输入:发送的数据
0082 ; //输出:无
0082 ; //功能描述:SPI从模式发送一个字节,先发送高位(发送的同时接收)
0082 ; //*****************************************************************************************
0082 ; uint8 Spi_Send(uint8 dat)
0082 ; {
0082 .dbline 89
0082 ; uint8 i,temp;
0082 ; temp = 0;
0082 4427 clr R20
0084 .dbline 91
0084 ;
0084 ; for(i=0; i<8; i++)
0084 6627 clr R22
0086 0FC0 xjmp L29
0088 L26:
0088 .dbline 92
0088 ; {
0088 .dbline 93
0088 ; if(dat & 0x80)
0088 07FF sbrs R16,7
008A 02C0 rjmp L30
008C .dbline 94
008C ; {
008C .dbline 95
008C ; MOSI_1;
008C C59A sbi 0x18,5
008E .dbline 95
008E .dbline 96
008E ; }
008E 01C0 xjmp L31
0090 L30:
0090 .dbline 97
0090 C598 cbi 0x18,5
0092 L31:
0092 .dbline 97
0092 ; else MOSI_0;
0092 .dbline 98
0092 ; dat <<= 1;
0092 000F lsl R16
0094 L32:
0094 .dbline 99
0094 L33:
0094 .dbline 99
0094 ; while(!SCK);
0094 B79B sbis 0x16,7
0096 FECF rjmp L32
0098 L35:
0098 .dbline 100
0098 L36:
0098 .dbline 100
0098 ; while(SCK);
0098 B799 sbic 0x16,7
009A FECF rjmp L35
009C .dbline 102
009C ;
009C ; temp <<= 1;
009C 440F lsl R20
009E .dbline 103
009E ; if(MISO)temp++;
009E B69B sbis 0x16,6
00A0 01C0 rjmp L38
00A2 .dbline 103
00A2 4395 inc R20
00A4 L38:
00A4 .dbline 105
00A4 L27:
00A4 .dbline 91
00A4 6395 inc R22
00A6 L29:
00A6 .dbline 91
00A6 6830 cpi R22,8
00A8 78F3 brlo L26
00AA .dbline 106
00AA ;
00AA ; }
00AA ; return temp;
00AA 042F mov R16,R20
00AC .dbline -2
00AC L25:
00AC 0E940000 xcall pop_gset2
00B0 .dbline 0 ; func end
00B0 0895 ret
00B2 .dbsym r temp 20 c
00B2 .dbsym r i 22 c
00B2 .dbsym r dat 16 c
00B2 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
0000 _Buffer::
0000 .blkb 1
0001 .dbsym e Buffer _Buffer c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -