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

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

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