?? 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) * 創(chuàng)建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件說明] *
(0008) * 處理器: *
(0009) * 系統(tǒng)時鐘: *
(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) * 頭 文 件 配 置 區(qū) *
(0032) ********************/
(0033) #include "PF_Config.h"
(0034) #include "HD_Support.h"
(0035)
(0036) /********************
(0037) * 系 統(tǒng) 宏 定 義 *
(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) * 模塊結構體定義區(qū) *
(0064) ********************/
(0065)
(0066) /********************
(0067) * 函 數 聲 明 區(qū) *
(0068) ********************/
(0069) void Device_INIT(void);
(0070)
(0071) /********************
(0072) * 模塊函數聲明區(qū) *
(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) * 模塊變量聲明區(qū) *
(0082) ********************/
(0083)
(0084) /********************
(0085) * 全局變量聲明區(qū) *
(0086) ********************/
(0087)
(0088)
(0089) /***********************************************************
(0090) * 函數說明:系統(tǒng)硬件初始化函數 *
(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) * 函數說明:系統(tǒng)端口初始化函數 *
(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 + -