⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c抢答器_主机程序.lst

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
__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 + -