?? i2c搶答器_主機程序.lst
字號:
0090 D1E4 RCALL pop_lset
0091 9518 RETI
(0208) }
(0209)
(0210) /***********************************************************
(0211) * 函數聲明:SPI初始化函數 *
(0212) * 輸入: 無 *
(0213) * 輸出: 無 *
(0214) * 調用函數:無 *
(0215) ***********************************************************/
(0216) static void SPI_INIT(void)
(0217) {
(0218) SPCR = 0x7D; //禁止SPI中斷,使能SPI模塊,LSB先傳送,選擇主機模式,空閑時時鐘為高,時鐘結束沿采樣,時鐘頻率64分頻
_SPI_INIT:
0092 E78D LDI R24,0x7D
0093 BD8C OUT 0x2C,R24
(0219) SPSR = 0x00; //不使用SPI倍速
0094 2422 CLR R2
0095 BC2D OUT 0x2D,R2
0096 9508 RET
_Delay_ms:
n --> R20
Time --> R16
0097 D1AF RCALL push_gset1
FILE: D:\實例17_I2C搶答器_主機程序\EX_Support.c
(0001) /***********************************************************
(0002) * 函數庫說明:底層硬件初始化驅動函數庫 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 創建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件說明] *
(0008) * 處理器: *
(0009) * 系統時鐘: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 庫] *
(0012) * 支持庫名稱:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持庫說明:底層硬件初始化聲明庫 *
(0015) * *
(0016) * 支持庫名稱:EX_Support.h *
(0017) * 需要版本: ----- *
(0018) * 支持庫說明:底層硬件初始化驅動聲明庫 *
(0019) * *
(0020) * 支持庫名稱:PF_Config.h *
(0021) * 需要版本: ----- *
(0022) * 支持庫說明:硬件平臺配置聲明庫 *
(0023) * -------------------------------------------------------- *
(0024) * [版本更新] *
(0025) * 修改: *
(0026) * 修改日期: *
(0027) * 版本: *
(0028) * -------------------------------------------------------- *
(0029) * [版本歷史] *
(0030) * -------------------------------------------------------- *
(0031) * [使用說明] *
(0032) ***********************************************************/
(0033)
(0034) /********************
(0035) * 頭 文 件 配 置 區 *
(0036) ********************/
(0037) # include "PF_Config.h"
(0038) # include "HD_Support.h"
(0039) # include "EX_Support.h"
(0040)
(0041)
(0042) /********************
(0043) * 系 統 宏 定 義 *
(0044) ********************/
(0045)
(0046) /*------------------*
(0047) * 常 數 宏 定 義 *
(0048) *------------------*/
(0049)
(0050) #define SSend 0x08 //啟動位已發送
(0051) #define RSSend 0x10 //復啟動位已發送
(0052) #define SLAWSendACK 0x18 //SLA+W已發送,收到ACK
(0053) #define SLAWSendNAK 0x20 //SLA+W已發送,收到NAK
(0054) #define SLARSendACK 0x40 //SLA+R已發送,收到ACK
(0055) #define SLARSendNAK 0x48 //SLA+R已發送,收到ACK
(0056) #define TDataACK 0x28 //DATA已發送,收到ACK
(0057) #define TDataNAK 0x30 //DATA已發送,收到NAK
(0058) #define RDataACK 0x50 //DATA已收到,ACK已發送
(0059) #define RDataNAK 0x58 //DATA已收到,NAK已發送
(0060) #define SLAWRecACK 0x60 //自己的從機地址被選中,ACK已返回
(0061) #define SRDataACK 0x80 //作為從機被地址被選中,數據已接收,ACK已返回
(0062)
(0063) #define TWIInProcess 0x00 //EEPROM操作中
(0064) #define TWIProcessOver 0x01 //EEPROM操作成功完成
(0065) #define TWIProcessNAK 0x11 //EEPROM操作中無法接收到主機應答
(0066) #define TWIProcessERR 0x21 //EEPROM操作遇到未知錯誤而終止
(0067)
(0068) #define ExtPortNum 3
(0069) #define TimeStampMax 1000
(0070)
(0071) /*------------------*
(0072) * 動 作 宏 定 義 *
(0073) *------------------*/
(0074)
(0075) #define SS_Low PORTB &= ~(1<<2)
(0076) #define SS_High PORTB |= (1<<2)
(0077)
(0078) #define PINE PortBuffer[0]
(0079) #define PORTF PortBuffer[1]
(0080) #define PORTG PortBuffer[2]
(0081)
(0082) #define KeyPin PINE
(0083) #define ScanPort PORTG
(0084) #define SegPort PORTF
(0085)
(0086) /********************
(0087) * 模塊結構體定義區 *
(0088) ********************/
(0089)
(0090) /********************
(0091) * 函 數 聲 明 區 *
(0092) ********************/
(0093) void System_INIT(void);
(0094) void Insert_Timer0_OVF_ISR_Code(void);
(0095)
(0096) /********************
(0097) * 模塊函數聲明區 *
(0098) ********************/
(0099) static void Driver_INIT(void);
(0100)
(0101) /********************
(0102) * 模塊變量聲明區 *
(0103) ********************/
(0104)
(0105) unsigned char* p = NULL;
(0106)
(0107) /********************
(0108) * 全局變量聲明區 *
(0109) ********************/
(0110) uint16 g_wSystemTimer = 0;
(0111) BOOL DoTime = TRUE;
(0112) BOOL ShowTime = FALSE;
(0113)
(0114) unsigned char PortBuffer[3];
(0115) unsigned char LEDDisBuffer[8];
(0116) unsigned char TWIProcess = TWIProcessOver;
(0117) unsigned char RecArr[6];
(0118) unsigned int g_wSystemTimer;
(0119)
(0120) const unsigned char DisTab[]=
(0121) {
(0122) 0xFC,0x60,0xDA,0xF2,0x66, //0,1,2,3,4
(0123) 0xB6,0xBE,0xE0,0xFE,0xF6, //5,6,7,8,9
(0124) 0xEE,0x3E,0x9C,0x7A,0x9E, //A,b,C,d,E
(0125) 0x8E,0xCE,0x1C,0x6E,0x7C, //F,P,L,H,U
(0126) 0x0A,0x10,0x02,0x00 //r,_,-,SP
(0127) };
(0128)
(0129) /***********************************************************
(0130) * 函數說明:毫秒級延時函數 *
(0131) * 輸入: 無 *
(0132) * 輸出: 無 *
(0133) * 調用函數:無 *
(0134) ***********************************************************/
(0135) void Delay_ms(unsigned int Time)
(0136) {
(0137) unsigned char n=0;
0098 2744 CLR R20
0099 C008 RJMP 0x00A2
(0138) while(Time>0)
(0139) {
(0140) for (n=1;n<187;n++)
009A E041 LDI R20,1
009B C002 RJMP 0x009E
(0141) {
(0142) NOP();
009C 0000 NOP
009D 9543 INC R20
009E 3B4B CPI R20,0xBB
009F F3E0 BCS 0x009C
(0143) }
(0144) Time--;
00A0 5001 SUBI R16,1
00A1 4010 SBCI R17,0
00A2 3000 CPI R16,0
00A3 0701 CPC R16,R17
00A4 F7A9 BNE 0x009A
00A5 D1A4 RCALL pop_gset1
00A6 9508 RET
_Beep:
Time --> R20
00A7 D19F RCALL push_gset1
00A8 01A8 MOVW R20,R16
(0145) }
(0146) }
(0147)
(0148) /***********************************************************
(0149) * 函數說明:蜂鳴器鳴叫函數 *
(0150) * 輸入: 無 *
(0151) * 輸出: 無 *
(0152) * 調用函數:無 *
(0153) ***********************************************************/
(0154) void Beep (unsigned int Time)
(0155) {
(0156) PORTB |= 0x01;
00A9 9A28 SBI 0x05,0
(0157) Delay_ms(Time);
00AA 018A MOVW R16,R20
00AB DFEB RCALL _Delay_ms
(0158) PORTB &= 0xFE;
00AC B185 IN R24,0x05
00AD 7F8E ANDI R24,0xFE
00AE B985 OUT 0x05,R24
00AF D19A RCALL pop_gset1
00B0 9508 RET
(0159) }
(0160)
(0161) /***********************************************************
(0162) * 函數說明:軟件驅動初始化函數 *
(0163) * 輸入: 無 *
(0164) * 輸出: 無 *
(0165) * 調用函數:無 *
(0166) ***********************************************************/
(0167) static void Driver_INIT(void)
(0168) {
_Driver_INIT:
00B1 9508 RET
(0169) //*在這里插入你的各類軟件驅動初始化代碼*//
(0170) }
(0171)
(0172) /***********************************************************
(0173) * 函數說明:系統初始化函數 *
(0174) * 輸入: 無 *
(0175) * 輸出: 無 *
(0176) * 調用函數:Device_INIT() Driver_INIT() *
(0177) ***********************************************************/
(0178) void System_INIT(void)
(0179) {
(0180) CLI();
_System_INIT:
00B2 94F8 BCLR 7
(0181)
(0182) Device_INIT();
00B3 DF96 RCALL _Device_INIT
(0183) Driver_INIT();
00B4 DFFC RCALL _Driver_INIT
(0184)
(0185) //*在這里插入你的系統環境變量初始化代碼*//
(0186)
(0187) SEI();
00B5 9478 BSET 7
00B6 9508 RET
(0188) }
(0189)
(0190) /***********************************************************
(0191) * 函數說明:定時器0中斷處理程序代碼插入函數 *
(0192) * 輸入: 無 *
(0193) * 輸出: 無 *
(0194) * 調用函數:無 *
(0195) ***********************************************************/
(0196) void Insert_Timer0_OVF_ISR_Code(void)
(0197) {
(0198) TCNT0 = 0x83; //重載定時器
_Insert_Timer0_OVF_ISR_Code:
00B7 E883 LDI R24,0x83
00B8 BD86 OUT 0x26,R24
(0199)
(0200) g_wSystemTimer++; //時標產生,以1秒為周期循環時標
00B9 91800102 LDS R24,g_wSystemTimer
00BB 91900103 LDS R25,g_wSystemTimer+1
00BD 9601 ADIW R24,1
00BE 93900103 STS g_wSystemTimer+1,R25
00C0 93800102 STS g_wSystemTimer,R24
(0201)
(0202) if (g_wSystemTimer >= TimeStampMax)
00C2 3E88 CPI R24,0xE8
00C3 E0E3 LDI R30,3
00C4 079E CPC R25,R30
00C5 F030 BCS 0x00CC
(0203) g_wSystemTimer = 0;
00C6 2422 CLR R2
00C7 2433 CLR R3
00C8 92300103 STS g_wSystemTimer+1,R3
00CA 92200102 STS g_wSystemTimer,R2
(0204)
(0205) DoTime = TRUE; //端口刷新與閃爍控制標志
00CC E081 LDI R24,1
00CD 93800104 STS DoTime,R24
00CF 9508 RET
(0206) }
(0207)
(0208) /***********************************************************
(0209) * 函數說明:定時器1中斷處理程序代碼插入函數 *
(0210) * 輸入: 無 *
(0211) * 輸出: 無 *
(0212) * 調用函數:無 *
(0213) ***********************************************************/
(0214) void Insert_Timer1_OVF_ISR_Code(void)
(0215) {
(0216) TIMERSTOP;
_Insert_Timer1_OVF_ISR_Code:
00D0 2422 CLR R2
00D1 92200081 STS 0x81,R2
(0217) ShowTime = TRUE;
00D3 E081 LDI R24,1
00D4 93800105 STS ShowTime,R24
(0218) Beep(10);
00D6 E00A LDI R16,0xA
00D7 E010 LDI R17,0
00D8 DFCE RCALL _Beep
00D9 9508 RET
(0219) }
(0220)
(0221) /***********************************************************
(0222) * 函數說明:TWI中斷處理程序代碼插入函數 *
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -