📄 uart.lst
字号:
__text_start:
__start:
0015 E5CF LDI R28,0x5F
0016 E0D4 LDI R29,4
0017 BFCD OUT 0x3D,R28
0018 BFDE OUT 0x3E,R29
0019 51C0 SUBI R28,0x10
001A 40D0 SBCI R29,0
001B EA0A LDI R16,0xAA
001C 8308 STD Y+0,R16
001D 2400 CLR R0
001E E6E3 LDI R30,0x63
001F E0F0 LDI R31,0
0020 E010 LDI R17,0
0021 36E5 CPI R30,0x65
0022 07F1 CPC R31,R17
0023 F011 BEQ 0x0026
0024 9201 ST R0,Z+
0025 CFFB RJMP 0x0021
0026 8300 STD Z+0,R16
0027 E2E6 LDI R30,0x26
0028 E0F0 LDI R31,0
0029 E6A0 LDI R26,0x60
002A E0B0 LDI R27,0
002B E010 LDI R17,0
002C 32E9 CPI R30,0x29
002D 07F1 CPC R31,R17
002E F021 BEQ 0x0033
002F 95C8 LPM
0030 9631 ADIW R30,1
0031 920D ST R0,X+
0032 CFF9 RJMP 0x002C
0033 D081 RCALL _main
_exit:
0034 CFFF RJMP _exit
_uart0_rx_isr:
0035 D0CF RCALL push_lset
FILE: E:\iccavr\无线+I2C\test1--uart\uart.c
(0001) //*************************程序说明部分**************************************
(0002) //本程序基于无线模块第3版(2005 12 13) 编写,通过MEGA8 与PTR8000
(0003) //实现上位机与下位机之间的程序传输
(0004) //主控制器MEGA8,晶振11.0592M
(0005) //*************************管脚定义部分**************************************
(0006) //SPI通讯部分
(0007) //PB2----SS
(0008) //PB3----MOSI
(0009) //PB4----MISO
(0010) //PB5----SCK
(0011)
(0012) //PTR8000控制引脚
(0013) //PC0----CD----INPUT
(0014) //PC1----AM----INPUT
(0015) //PC2----DR----INPUT
(0016) //PC3----PWR-----OUTPUT
(0017) //PC4----TXEN----OUTPUT
(0018) //PC5----TRXCE---OUTPUT
(0019)
(0020) //载波频率控制
(0021) //PD2---PD7 ----6BIT频率选择
(0022)
(0023) //PB0----SPEAKER
(0024) //PB1----LED
(0025)
(0026) //*************************头文件包含部分***********************************
(0027) #include <iom8v.h>
(0028) #include <macros.h>
(0029) //*************************宏定义部分*****************************************
(0030) #define WC 0x00 //Write configuration register Command
(0031) #define RC 0x10 //Read configuration register Command
(0032) #define WTP 0x20 //Write TX payload Command
(0033) #define RTP 0x21 //Read TX payload Command
(0034) #define WTA 0x22 //Write TX Address Command
(0035) #define RTA 0x23 //Read TX Address Command
(0036) #define RRP 0x24 //Read RX payload Command
(0037)
(0038) //*************************全局变量定义部分*******************************
(0039) unsigned char Tran;
(0040) unsigned char Recv;
(0041) unsigned char RC0 = 0x4c,RC1 = 0x0c;
(0042) unsigned char Add = 0xa1;
(0043) //*************************函数定义部分**************************************
(0044) void init_port(void); //初始化MEGA各控制引脚
(0045)
(0046) void Delay_1ms(void); //延时1ms函数
(0047) void Delay_Nms(unsigned int i); //延时Nms函数
(0048) void LED(unsigned char i); //点亮/熄灭LED
(0049)
(0050) //串口通讯用函数
(0051) void Uart_Init(void); //UART初始化
(0052) void Uart_Send(unsigned char c); //UART发送一个字符
(0053)
(0054)
(0055) //SPI通讯用函数
(0056) void SPI_MasterInit(void); //SPI主机初始化
(0057) void SPI_M_Send(unsigned char c); //主机方式发送一个字符
(0058) unsigned char SPI_M_Recv(unsigned char c); //主机接收一个字符
(0059)
(0060) //PTR8000用函数
(0061) void PTR8_Standby(void); //set TRC_CE Disable
(0062) void PTR8_TREN(void); //set TRX_CE Enable
(0063) void PTR8_TX(void); //无线模块发送状态
(0064) void PTR8_RX(void); //无线模块接收状态
(0065) void Init_PTR8_CR(void); //初始化PTR8000控制状态
(0066)
(0067) void Init_Device(void); //初始化串口、SPI口及其他设备
(0068)
(0069) //******************************函数实现部分************************************
(0070) #pragma interrupt_handler uart0_rx_isr:12
(0071) void uart0_rx_isr(void)
(0072) {
(0073) Recv = UDR;
0036 B02C IN R2,0x0C
0037 92200063 STS _Recv,R2
(0074) Uart_Send(Recv);
0039 2D02 MOV R16,R2
003A D036 RCALL _Uart_Send
(0075)
(0076) }
003B D0E0 RCALL pop_lset
003C 9518 RETI
(0077)
(0078) /* 函数名: init_port
(0079) 功能说明:初始化各MEGA8各控制引脚
(0080) 参数说明:无
(0081) 函数作者:Haibo YU
(0082) 版本号: 1.0
(0083) 创建时间:2005-12-23
(0084) 修改时间:
(0085) 修改内容: */
(0086)
(0087) void init_port(void)
(0088) {
(0089) PORTB = 0x2f; //置PB0,PB1,PB2,PB3,PB5为1,PB4,PB6,PB7为0
_init_port:
003D E28F LDI R24,0x2F
003E BB88 OUT 0x18,R24
(0090) DDRB = 0x2f; //置PB0--SPK,PB1--LED,PB2--SS,PB3--MOSI,PB5--SCK为输出,PB4--MISO为输入
003F BB87 OUT 0x17,R24
(0091) PORTC = 0x18; //置PWR,TXEN为1, TRXCE为0
0040 E188 LDI R24,0x18
0041 BB85 OUT 0x15,R24
(0092) DDRC = 0x38; //置PC0,PC1,PC2输入;PC3--PWR,PC4--TXEN,PC5--TRXCE输出
0042 E388 LDI R24,0x38
0043 BB84 OUT 0x14,R24
(0093) PORTD = 0xff;
0044 EF8F LDI R24,0xFF
0045 BB82 OUT 0x12,R24
(0094) DDRD = 0x00; //置PD口全部为输入,启动内部弱上拉
0046 2422 CLR R2
0047 BA21 OUT 0x11,R2
(0095) }
0048 9508 RET
(0096) //**************************************************************************************
(0097)
(0098) /* 函数名: Delay_1ms
(0099) 功能说明:软件延时1ms
(0100) 参数说明:无
(0101) 函数作者:Haibo YU
(0102) 版本号: 1.0
(0103) 创建时间:2005-12-06
(0104) 修改时间:
(0105) 修改内容: */
(0106) void Delay_1ms(void)
(0107) {
(0108) unsigned int i;
(0109) for ( i = 0 ; i < ( unsigned int ) 11 * 143 - 2 ; i ++ )
_Delay_1ms:
i --> R16
0049 2700 CLR R16
004A 2711 CLR R17
004B C002 RJMP 0x004E
004C 5F0F SUBI R16,0xFF
004D 4F1F SBCI R17,0xFF
004E 3203 CPI R16,0x23
004F E0E6 LDI R30,6
0050 071E CPC R17,R30
0051 F3D0 BCS 0x004C
(0110) ;
(0111) }
0052 9508 RET
_Delay_Nms:
j --> R20
N --> R22
0053 D0AE RCALL push_gset2
0054 01B8 MOVW R22,R16
(0112) //******************************************************************
(0113)
(0114) /* 函数名: Delay_Nms
(0115) 功能说明:软件延时Nms,适用于所有CPU
(0116) 参数说明:N值决定延时长度。范围为0~65536之间的整数
(0117) 函数作者:Haibo YU
(0118) 版本号: 1.0
(0119) 创建时间:2005-12-06
(0120) 修改时间:
(0121) 修改内容: */
(0122) void Delay_Nms(unsigned int N)
(0123) {
(0124) unsigned int j;
(0125) for( j = 0 ; j < N ; j ++ )
0055 2744 CLR R20
0056 2755 CLR R21
0057 C003 RJMP 0x005B
(0126) Delay_1ms();
0058 DFF0 RCALL _Delay_1ms
0059 5F4F SUBI R20,0xFF
005A 4F5F SBCI R21,0xFF
005B 1746 CP R20,R22
005C 0757 CPC R21,R23
005D F3D0 BCS 0x0058
(0127) }
005E D08A RCALL pop_gset2
005F 9508 RET
(0128) //*******************************************************************
(0129)
(0130) /* 函数名: LED
(0131) 功能说明:点亮/熄灭LED
(0132) 参数说明:0----点亮;1----熄灭
(0133) 函数作者:Haibo YU
(0134) 版本号: 1.0
(0135) 创建时间:2005-12-23
(0136) 修改时间:
(0137) 修改内容: */
(0138)
(0139) void LED(unsigned char i)
(0140) {
(0141) if(i == 0)
_LED:
i --> R16
0060 2300 TST R16
0061 F411 BNE 0x0064
(0142) PORTB &= ~BIT(PB1);
0062 98C1 CBI 0x18,1
0063 C001 RJMP 0x0065
(0143) else
(0144) PORTB |= BIT(PB1);
0064 9AC1 SBI 0x18,1
(0145) }
0065 9508 RET
(0146)
(0147) //*******************************************************************
(0148)
(0149) //串口通讯用函数
(0150)
(0151) /* 函数名: Uart_Init
(0152) 功能说明:串口初始化函数,适用于所有CPU
(0153) 波特率9600,8位字节,无奇偶校验
(0154) 参数说明:无
(0155) 函数作者:Haibo YU
(0156) 版本号: 1.0
(0157) 创建时间:2005-12-02
(0158) 修改时间:
(0159) 修改内容: */
(0160) void Uart_Init(void)
(0161) {
(0162) UCSRB = 0x00; //disable while setting baud rate
_Uart_Init:
0066 2422 CLR R2
0067 B82A OUT 0x0A,R2
(0163) UCSRA = 0x00;
0068 B82B OUT 0x0B,R2
(0164) UCSRC = 0x86;
0069 E886 LDI R24,0x86
006A BD80 OUT 0x20,R24
(0165) UBRRL = 0x47; //set baud rate lo
006B E487 LDI R24,0x47
006C B989 OUT 0x09,R24
(0166) UBRRH = 0x00; //set baud rate hi
006D BC20 OUT 0x20,R2
(0167) UCSRB = 0x98;
006E E988 LDI R24,0x98
006F B98A OUT 0x0A,R24
(0168) }
0070 9508 RET
(0169) //********************************************************************
(0170)
(0171) /* 函数名: Uart_Send
(0172) 功能说明:通过查询方式,串口发送一个字节函数,适用于所有CPU
(0173) 参数说明:c为所要发送的字节
(0174) 函数作者:Haibo YU
(0175) 版本号: 1.0
(0176) 创建时间:2005-12-02
(0177) 修改时间:
(0178) 修改内容: */
(0179) void Uart_Send(unsigned char c)
(0180) {
(0181) while(!(UCSRA&(1<<UDRE)))
_Uart_Send:
c --> R16
0071 9B5D SBIS 0x0B,5
0072 CFFE RJMP _Uart_Send
(0182) ; //等待空闲
(0183) UDR=c; //发送数据
0073 B90C OUT 0x0C,R16
(0184) }
0074 9508 RET
(0185)
(0186)
(0187) //**********************************************************************
(0188)
(0189) //SPI通讯用函数
(0190)
(0191) /* 函数名: SPI_MasterInit
(0192) 功能说明:SPI主机初始化函数。使能SPI,MSB在前,主模式
(0193) 起始上升沿,采样上升沿。16分频
(0194) 参数说明: 无
(0195) 返回值: 无
(0196) 函数作者:Haibo YU
(0197) 版本号: 1.0
(0198) 创建时间:2005-12-02
(0199) 修改时间:
(0200) 修改内容: */
(0201)
(0202) void SPI_MasterInit(void)
(0203) {
(0204) SPCR = 0x51; //SPI控制寄存器初始化:SPI允许,MSB先发,主模式,16分频
_SPI_MasterInit:
0075 E581 LDI R24,0x51
0076 B98D OUT 0x0D,R24
(0205) }
0077 9508 RET
(0206) //**********************************************************************
(0207) /* 函数名: SPI_M_Send
(0208) 功能说明:SPI主机发送一个字节函数。
(0209) 参数说明: c为要发送的字节
(0210) 返回值: 无
(0211) 函数作者:Haibo YU
(0212) 版本号: 1.0
(0213) 创建时间:2005-12-02
(0214) 修改时间:2005-12-05
(0215) 修改内容: 去掉SS信号控制语句 */
(0216)
(0217) void SPI_M_Send(unsigned char c)
(0218) {
(0219) SPDR = c; //传送开始
_SPI_M_Send:
c --> R16
0078 B90F OUT 0x0F,R16
(0220) while(!(SPSR & 0X80))
0079 9B77 SBIS 0x0E,7
007A CFFE RJMP 0x0079
(0221) ; //查询SPIF标志
(0222)
(0223) }
007B 9508 RET
(0224) //************************************************************************
(0225)
(0226) /* 函数名: SPI_M_Recv
(0227) 功能说明:SPI主机方式接收一个字节函数。
(0228) 参数说明:任意无效字符
(0229) 返回值: 返回接收到的字节
(0230) 函数作者:Haibo YU
(0231) 版本号: 1.0
(0232) 创建时间:2005-12-06
(0233) 修改时间:
(0234) 修改内容: */
(0235)
(0236) unsigned char SPI_M_Recv(unsigned char c)
(0237) {
(0238) SPDR = c; //传送开始
_SPI_M_Recv:
c --> R16
007C B90F OUT 0x0F,R16
(0239) while(!(SPSR & 0X80))
007D 9B77 SBIS 0x0E,7
007E CFFE RJMP 0x007D
(0240) ; //查询SPIF标志
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -