📄 i2c抢答器_主机程序.lst
字号:
__text_start:
__start:
002A EFCF LDI R28,0xFF
002B E0D2 LDI R29,2
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 52C0 SUBI R28,0x20
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E0E8 LDI R30,0x8
0034 E0F1 LDI R31,1
0035 E011 LDI R17,1
0036 31E9 CPI R30,0x19
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E4EC LDI R30,0x4C
003D E0F0 LDI R31,0
003E E0A0 LDI R26,0
003F E0B1 LDI R27,1
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 D18B RCALL _main
_exit:
0049 CFFF RJMP _exit
FILE: D:\实例17_I2C抢答器_主机程序\HD_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:PF_Config.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:硬件平台配置声明库 *
(0019) * -------------------------------------------------------- *
(0020) * [版本更新] *
(0021) * 修改: *
(0022) * 修改日期: *
(0023) * 版本: *
(0024) * -------------------------------------------------------- *
(0025) * [版本历史] *
(0026) * -------------------------------------------------------- *
(0027) * [使用说明] *
(0028) ***********************************************************/
(0029)
(0030) /********************
(0031) * 头 文 件 配 置 区 *
(0032) ********************/
(0033) #include "PF_Config.h"
(0034) #include "HD_Support.h"
(0035)
(0036) /********************
(0037) * 系 统 宏 定 义 *
(0038) ********************/
(0039) #pragma interrupt_handler Timer0_OVF_ISR:iv_TIMER0_OVF
(0040) #pragma interrupt_handler Timer1_OVF_ISR:iv_TIMER1_OVF
(0041) #pragma interrupt_handler TWI_ISR:iv_TWI
(0042)
(0043) /*------------------*
(0044) * 常 数 宏 定 义 *
(0045) *------------------*/
(0046)
(0047) /*------------------*
(0048) * 动 作 宏 定 义 *
(0049) *------------------*/
(0050) #ifndef INSERT_TIMER0_OVF_ISR_CODE
(0051) #define INSERT_TIMER0_OVF_ISR_CODE
(0052) #endif
(0053)
(0054) #ifndef INSERT_TIMER1_OVF_ISR_CODE
(0055) #define INSERT_TIMER1_OVF_ISR_CODE
(0056) #endif
(0057)
(0058) #ifndef INSERT_TWI_ISR_CODE
(0059) #define INSERT_TWI_ISR_CODE
(0060) #endif
(0061)
(0062) /********************
(0063) * 模块结构体定义区 *
(0064) ********************/
(0065)
(0066) /********************
(0067) * 函 数 声 明 区 *
(0068) ********************/
(0069) void Device_INIT(void);
(0070)
(0071) /********************
(0072) * 模块函数声明区 *
(0073) ********************/
(0074) static void Port_INIT(void);
(0075) static void Timer0_INIT(void);
(0076) static void Timer1_INIT(void);
(0077) static void TWI_INIT(void);
(0078) static void SPI_INIT(void);
(0079)
(0080) /********************
(0081) * 模块变量声明区 *
(0082) ********************/
(0083)
(0084) /********************
(0085) * 全局变量声明区 *
(0086) ********************/
(0087)
(0088)
(0089) /***********************************************************
(0090) * 函数说明:系统硬件初始化函数 *
(0091) * 输入: 无 *
(0092) * 输出: 无 *
(0093) * 调用函数:Port_INIT() Timer0_INIT() *
(0094) ***********************************************************/
(0095) void Device_INIT(void)
(0096) {
(0097) Port_INIT();
_Device_INIT:
004A D00A RCALL _Port_INIT
(0098) Timer0_INIT();
004B D015 RCALL _Timer0_INIT
(0099) Timer1_INIT();
004C D021 RCALL _Timer1_INIT
(0100) TWI_INIT();
004D D031 RCALL _TWI_INIT
(0101) SPI_INIT();
004E D043 RCALL _SPI_INIT
(0102) //*在这里添加其他初始化函数*//
(0103)
(0104) TIMSK0 = BIT(TOIE0); //启动定时器0溢出中断资源
004F E081 LDI R24,1
0050 9380006E STS 0x6E,R24
(0105) TIMSK1 = BIT(TOIE1); //启动定时器1溢出中断资源
0052 9380006F STS 0x6F,R24
0054 9508 RET
(0106) //*在这里添加其他全局寄存器的初始化代码*//
(0107) }
(0108)
(0109) /***********************************************************
(0110) * 函数说明:系统端口初始化函数 *
(0111) * 输入: 无 *
(0112) * 输出: 无 *
(0113) * 调用函数:无 *
(0114) ***********************************************************/
(0115) static void Port_INIT(void)
(0116) {
(0117) //*在这里添加端口初始化代码*//
(0118) PORTB = 0b11111110; //MOSI,#SS,CLK端均设置为高电平,MISO端开启内部上拉
_Port_INIT:
0055 EF8E LDI R24,0xFE
0056 B985 OUT 0x05,R24
(0119) PORTC = 0b11111111;
0057 EF8F LDI R24,0xFF
0058 B988 OUT 0x08,R24
(0120) PORTD = 0b11111111;
0059 B98B OUT 0x0B,R24
(0121)
(0122) DDRB = 0b00101101;
005A E28D LDI R24,0x2D
005B B984 OUT 0x04,R24
(0123) DDRC = 0b00100000;
005C E280 LDI R24,0x20
005D B987 OUT 0x07,R24
(0124) DDRD = 0b00000000;
005E 2422 CLR R2
005F B82A OUT 0x0A,R2
0060 9508 RET
(0125) }
(0126)
(0127) /***********************************************************
(0128) * 函数声明:定时器0初始化函数 *
(0129) * 输入: 无 *
(0130) * 输出: 无 *
(0131) * 调用函数:无 *
(0132) ***********************************************************/
(0133) static void Timer0_INIT(void)
(0134) {
(0135) //*在这里粘贴从代码生成向导中生成的初始化代码*//
(0136) //*要求为1kHz的溢出中断 *//
(0137) TCCR0B = 0x00;
_Timer0_INIT:
0061 2422 CLR R2
0062 BC25 OUT 0x25,R2
(0138) TCNT0 = 0x83; //计数初值
0063 E883 LDI R24,0x83
0064 BD86 OUT 0x26,R24
(0139) TCCR0A = 0x00;
0065 BC24 OUT 0x24,R2
(0140) TCCR0B = 0x02; //8分频
0066 E082 LDI R24,2
0067 BD85 OUT 0x25,R24
0068 9508 RET
_Timer0_OVF_ISR:
0069 D1F4 RCALL push_lset
(0141) }
(0142)
(0143) /***********************************************************
(0144) * 函数声明:定时器0溢出中断处理程序 *
(0145) * 输入: 无 *
(0146) * 输出: 无 *
(0147) * 调用函数:INSERT_TIMER0_OVF_ISR_CODE *
(0148) ***********************************************************/
(0149) void Timer0_OVF_ISR(void)
(0150) {
(0151) //*这里要添加对定时计数器重新设置计数底数的代码*//
(0152) INSERT_TIMER0_OVF_ISR_CODE
006A 9478 BSET 7
006B D04B RCALL _Insert_Timer0_OVF_ISR_Code
006C D208 RCALL pop_lset
006D 9518 RETI
(0153) }
(0154)
(0155) /***********************************************************
(0156) * 函数声明:定时器1初始化函数 *
(0157) * 输入: 无 *
(0158) * 输出: 无 *
(0159) * 调用函数:无 *
(0160) ***********************************************************/
(0161) static void Timer1_INIT(void)
(0162) {
(0163) //*在这里粘贴从代码生成向导中生成的初始化代码*//
(0164) //*要求为3S的溢出中断 *//
(0165) TCCR1B = 0x00;
_Timer1_INIT:
006E 2422 CLR R2
006F 92200081 STS 0x81,R2
(0166) TCNT1H = 0xCD;
0071 EC8D LDI R24,0xCD
0072 93800085 STS 0x85,R24
(0167) TCNT1L = 0x24;
0074 E284 LDI R24,0x24
0075 93800084 STS 0x84,R24
(0168) TCCR1A = 0x00;
0077 92200080 STS 0x80,R2
0079 9508 RET
_Timer1_OVF_ISR:
007A D1E3 RCALL push_lset
(0169) }
(0170)
(0171) /***********************************************************
(0172) * 函数声明:定时器0溢出中断处理程序 *
(0173) * 输入: 无 *
(0174) * 输出: 无 *
(0175) * 调用函数:INSERT_TIMER1_OVF_ISR_CODE *
(0176) ***********************************************************/
(0177) void Timer1_OVF_ISR(void)
(0178) {
(0179) //*这里要添加对定时计数器重新设置计数底数的代码*//
(0180) INSERT_TIMER1_OVF_ISR_CODE
007B 9478 BSET 7
007C D053 RCALL _Insert_Timer1_OVF_ISR_Code
007D D1F7 RCALL pop_lset
007E 9518 RETI
(0181) }
(0182)
(0183) /***********************************************************
(0184) * 函数声明:TWI初始化函数 *
(0185) * 输入: 无 *
(0186) * 输出: 无 *
(0187) * 调用函数:无 *
(0188) ***********************************************************/
(0189) static void TWI_INIT(void)
(0190) {
(0191) //这里粘贴从代码生成向导中获得的初始化代码
(0192) TWCR= 0x00; //初始化之前关闭TWI
_TWI_INIT:
007F 2422 CLR R2
0080 922000BC STS 0xBC,R2
(0193) TWBR= 0xC8; //设置时钟位速率,TWI位速率为2.4k
0082 EC88 LDI R24,0xC8
0083 938000B8 STS 0xB8,R24
(0194) TWSR= 0x00; //设置预分频比为1
0085 922000B9 STS 0xB9,R2
(0195) TWAR= 0xF0; //当主机接收从机返回时间数据时的TWI从机地址
0087 EF80 LDI R24,0xF0
0088 938000BA STS 0xBA,R24
(0196) TWCR= 0x45; //允许应答,使能TWI,使能TWI中断
008A E485 LDI R24,0x45
008B 938000BC STS 0xBC,R24
008D 9508 RET
_TWI_ISR:
008E D1CF RCALL push_lset
(0197) }
(0198)
(0199) /***********************************************************
(0200) * 函数声明:TWI事件中断处理程序 *
(0201) * 输入: 无 *
(0202) * 输出: 无 *
(0203) * 调用函数:INSERT_TWI_ISR_CODE *
(0204) ***********************************************************/
(0205) void TWI_ISR(void)
(0206) {
(0207) INSERT_TWI_ISR_CODE
008F D04A RCALL _Insert_Twi_Isr_Code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -