本程序使用MSP430F149控制IIC总线EEProm AT24C02;MCU的通用输入输出(GPIO)端口P1.2、P1.3 与AT24C02 的SCL、SDA端口相连接构成I2C总线,因为MSP430F149 内部没有专用的I2C接口电路,所以只能用IO端口来模拟I2C时序从而实现对EEPROM的读写操作。从图 3.3 中我们可以看到EEPROM地址选择端口A0~A2 都外接低电平,所以进行I2C通信时,EEPROM的从机地址是唯一的,即A0~A2 所对应的地址控制位均为 0。 因为AT24C0X(X=1,2,4,8,16)系列芯片的管脚是兼容的,所以用户也可以自行更换其他型号的芯片,无需改动任何硬件结构,只需注意器件地址和存储空间寻址模式的变化,相应地修改软件程序即可。
上传时间: 2014-01-09
上传用户:pompey
该程序实现跑马灯效果,跑马灯共4个状态循环显示,本程序只使用了4个LED显示,可改变程序中的输出位数,增加显示位数。 INT_DIV 模块用于对主频进行分频,该实验中采用主频为50MHz的频率,进过分频产生5Hz的频率,以便在实验板上显示。(如果不分频直接用于实验板,LED将显示一直是亮的。) LED 模块用于产生4种不同的状态进行显示。 在电路中都是低电平有效。
上传时间: 2014-12-08
上传用户:youth25
用单片机的I/O口模拟I2C协议 I2C用IO模拟程序网上范例最多的就是51的程序了,这些范例的正确性无需怀疑.但是如果直接以它为蓝本将它"AVR化",一不留神,就会有点问题了. 这要从I2C的硬件规范和AVR及51单片机的IO口说起.I2C要求SCL,SDA二线都有 线与 功能,即I2C驱动口应该是 漏极开路 电路,其高电平的维持是靠上拉电阻来实现的, 而低电平则需要驱动口的强下拉能力. 51单片机IO口正好完全符合这个特性.写起I2C驱动颇为得心应手.但是AVR的IO口强大了,它输出的高电平是实实在在的高电平,而不是靠什么上拉电阻来提供,只有10mA都不到的电流!于是如果直接使用 PORTB_Bit0 = 1这样的操作,就不能满足I2C的线与功能了,如果此时有别的设备要将SCL或者SDA拉低,那么结果就是二个IO口打架,谁赢谁输不得而知,时间长了,多半是两败俱伤,芯片发热吧. 当然AVR的IO口自然有办法满足I2C的电气特性要求,不就是不能输出1么,那么用它的高阻状态即可(DDRB_Bit0=0,PORTB_Bit0=0即可),要输出0么(DDRB_Bit0=1,PORTB_Bit0=0).
上传时间: 2016-07-19
上传用户:gxrui1991
MCU主频12MHz,软PWM控制IO模拟。PWM脉宽调节10uS PWM频率20mS=50Hz, PWM高电平脉宽700uS~2300uS,PWM低电平脉宽19300uS~17700uS "零耗时"并非不耗时。只是没用软件空等待等恼人的函数。 其主要原理是利用低频宽脉冲软PWM信号的“低速”而T2的16位定时器自动装载功能。 T2在每个PWM周期内中断两次。即PWM高电平和PWM低电平各中断1次。 合理应用RCAP2的预装载功能并进行简单的减法运算而轻松完成任务的要求。
上传时间: 2014-11-18
上传用户:wpt
MCS-51单片机有5个中断源,其中两个是由-INT0、-INT1引脚输入的外部中断源;另外三个是内部中断源即由T0、T1的溢出引起中断和串行口发送完一个字节或接收到一个字节数据引起中断。触发外部中断有两种方式,即下降沿引起中断或低电平引起中断。当编程TCON中的ITi(i=0、1)为1时,则引起触发的方式为边沿触发方式,反之(ITi=0)为低电平触发方式。每个中断源的中断请求能否得到响应要受两级“开关”的控制,即一个总“开关”
上传时间: 2016-09-18
上传用户:chenxichenyue
本程序用于MICROCHIP 24LC64 EEPROM的读写。本程序不使用芯片级联方式, 请将A0,A1,A2 管脚接至低电平。本程序使用IOC6作为SDA,IOC7作为SCL。 程序中的地址空间最大可至64K:24LC00-16-0,24LC01-128-8,24LC02-256-8, 24LC04-512-16,24LC08-1K-16,24LC16-2K-32,24LC32-4K-32,24LC64-8K-32, 24LC128-16K-64,24LC256-32K-64,24LC512-64K-128,读写数据均为8bits。 以上器件的格式为(型号-地址空间-页大小)不同器件的页大小不同,因此页写 程序需作相应修改,其他字节写,随机读以及顺序读程序均相同
上传时间: 2016-11-07
上传用户:kytqcool
红外解码程序主要工作为等待红外线信号出现,并跳过引导信号,开始收集连续32位的表面数据,存入内存的连续空间。位信号解码的原则是:以判断各个位的波宽信号来决定高低信号。位解码原理如下: 解码为0:低电平的宽度0.56ms+高电平的宽度0.56ms。 解码为1:低电平的宽度1.68ms+高电平的宽度0.56ms。 程序中必须设计一精确的0.1ms延时时间作为基础时间,以计数实际的波形宽度,若读值为5表示波形宽度为0.5ms,若读值为16表示波形宽度为1.6ms,以此类推。高电平的宽度1.12ms为固定,因此可以直接判断低电平的宽度的计数值5或时16,来确定编码为0或是1。程序中可以减法指令SUBB来完成判断,指令“SUBB A,R2”中若R2为计数值,A寄存器设为8,就可如下: 当“8-R2”有产生借位,借位标志C=1,表示编码为1。 当“8-R2”无产生借位,借位标志C=0,表示编码为0。 将借位标志C经过右移指令“RRC A”转入A寄存器中,再经由R0寄存器间接寻址存入内存中。
上传时间: 2016-11-09
上传用户:miaochun888
对TC9012 (长虹 K8B )遥控器的解码- 这种遥控码具有以下特征,采用脉宽调制的串行码 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始, 不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms, 所以必须根据高电平的宽度区别“0”和“1”。 如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,
上传时间: 2014-12-09
上传用户:songnanhua
这是个单片机的流水灯实验,编绎如果没有出错的话,会从P1口轮流输出低电平,接上灯后就是流水灯。
上传时间: 2016-12-08
上传用户:gut1234567
这是个单片机的流水灯实验2,编绎如果没有出错的话,会从P1口轮流输出低电平,接上灯后就是流水灯。
上传时间: 2016-12-08
上传用户:jennyzai