版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统应用技术三、C8051F310+C51应用实例赵玉昆嵌入式系统应用技术实例n实例1 通用I/O端口n实例2 A/D转换n实例3 温度测量n实例4 定时器及中断n实例5 UART应用n实例6 SMBus应用(24C0X)n实例7 I2C应用(ZLG7290)n实例8 I2C应用(PCF8563T)嵌入式系统应用技术实例1 通用I/O端口n1.1 C8051F310端口的特殊性n1.2 通用I/O端口实例n1.3 提高题嵌入式系统应用技术1.1 C8051F310端口的特殊性nC8051F310有29个 I/O 引脚P0、P1、P2、P3-5脚)n通过交叉开关可以使引脚分配给数字外设、模
2、拟外设n未分配给的管脚作为通用 I/OGPIO)n(1端口相关寄存器n(2I/O 端口初始化n(3I/O 端口初始化举例嵌入式系统应用技术(1端口相关寄存器Pn:端口寄存器PnMDIN:输入方式1=数字输入,0=模拟输入PnMDOUT:输出方式0=开漏输出,1=推挽输出PnSKIP:端口跳过0=不跳过,1=跳过XBR0、XBR1: 交叉开关0=不分配,1=分配数字外设其中n=03 为复位值嵌入式系统应用技术(2交叉开关P0.0P2.3管脚,通过交叉开关,分配给GPIO或数字外设P2.4P3.4管脚,不通过交叉开关,不分配给数字外设。UARTSMBus等P0.07P1.07P2.03交叉开关P0
3、.0脚P2.4脚P3.4脚P2.47P3.04。P2.3脚.XBR0,XBR1,PnSKIP.嵌入式系统应用技术(3I/O 端口初始化n端口 I/O 初始化教科书P47)n1 输入方式PnMDIN),端口引脚的输入方式模拟或数字)。n2 输出方式PnMDOUT),端口引脚的输出方式开漏或推挽)。n3 端口跳过寄存器PnSKIP),交叉开关跳过的引脚。n4 将引脚分配给要使用的外设。(XBR0、XBR1)n5 使能交叉开关XBARE =1)。n阐明:通用I/O端口P0.0-P2.3的初始化要做第1、2、5步。n 通用I/O端口P2.4-P3.4的初始化只要做第1、2步。输入PnMDIN数字模拟1
4、0输出PnMDOUT开漏推挽001嵌入式系统应用技术(3I/O 端口初始化举例例如:C8051F310目标板上的发光管D2接到了P3.3脚,按钮S2接到了P0.7脚,模拟量接到了P2.4脚。P3.3做数字输出、 P0.7做数字输入、 P2.4做模拟输入P3MDIN = 0 xff;/P3.3做数字输入默许)P3MDOUT = 0 x08;/P3.3推挽输出P0MDIN = 0 xff;/P0.7做数字输入默许)P2MDIN = 0 xef;/P2.4做模拟输入嵌入式系统应用技术1.2 通用 I/O 端口应用实例例题:C8051F310目标板上的发光管D2接到了P3.3脚,按钮S2接到了P0.7
5、脚,模拟量接到了P2.4脚。要求:松开S2则D2慢闪,按住S2则D2快闪。嵌入式系统应用技术1.2 通用 I/O 端口应用实例续)#include / C8051F310的SFR定义sbit LED=P33;/ LED位定义sbit SW=P07;/ SW位定义/- 延时 -void delay(unsigned long v)while(-v);/- 主程序 -void main(void)PCA0MD &= 0 x40;/ WDTE = 0 (禁止看门狗)P3MDIN = 0 xff;/P3.3做数字输入默许)P3MDOUT = 0 x08;/P3.3推挽输出P0MDIN = 0 xff;
6、/P0.7做数字输入默许)while(1)LED = !LED;/LED闪烁delay(SW ? 20000 : 5000);/SW按下则快闪,否则慢闪嵌入式系统应用技术1.3 提高题(1按一下S2,D2亮,再按一下S2,D2灭,依此类推。(2按下S2,D2闪亮3次,松开S2,D2闪亮2次,依此类推。(3用C8051F310带动DP-51实验箱,使8个LED左向、右向流水点亮。嵌入式系统应用技术实例2 A/D转换n2.1 C8051F310的AD转换器简介n2.2 左右对齐的例子n2.3 ADC相关寄存器n2.4 ADC 输入引脚配置n2.5 A/D转换实例n2.6 提高题嵌入式系统应用技术n
7、10位ADC原理框图 除P0口嵌入式系统应用技术2.1 C8051F310的AD转换器简介n10 位逐次逼近型 ADC, 最高采样率200kspsnAMX0P:正输入:23 选 1:P1.0P3.4、温度传感 器、VDDnAMX0N:负输入:22 选 1:P1.0P3.4、GNDn单端方式:GND作为负输入,其余为差分方式 (略)。nADC0H、ADC0L:转换结果nAD0LJST 位:决定转换结果左对齐或右对齐Justifiedn输入范围: 0 VREF*1023/1024nAD值与输入电压( VIN的关系:VINVREFAD值 = ( ) * 1024嵌入式系统应用技术2.2 左右对齐的例
8、子n单端方式时左、右对齐的例子右对齐左对齐满量程16进制0 x03FF 0 xFFC0 2进制0000 0011 1111 1111 1111 1111 1100 0000半量程16进制0 x0200 0 x8000 2进制0000 0010 0000 0000 1000 0000 0000 0000嵌入式系统应用技术2.3 电压基准VREFnREF0CN: 电压基准控制寄存器nREFSL:0=选择外部电压基准来自P0.0脚)n 1=或内部电压基准VDD)nTEMPE:1=允许内部温度传感器工作nBIASE:1=内部偏压发生器工作运用 ADC 时该位必须为1) D7D6D5D4D3D2D1D0
9、复位值- -REFSLTEMPEBIASE -00000000嵌入式系统应用技术2.3 ADC相关寄存器AMUX0P:ADC 正输入通道选择寄存器AMX0P(正端选择):可选P1.0P3.4、温度传感 器、VDDAMUX0N:ADC 负输入通道选择寄存器AMX0N(负端选择):可选P1.0P3.4、GNDD7D6D5D4D3D2D1D0复位值-AMX0P00000000D7D6D5D4D3D2D1D0复位值-AMX0N00000000嵌入式系统应用技术2.3 ADC相关寄存器续1)ADC0CF:配置寄存器每次AD转换约需11个AD时钟脉冲AD0SC(选择AD时钟):复位后,AD时钟=系统时钟/
10、32AD0LJST(左对齐) :0=右对齐最低采样率 = 24.5MHz / 32 / 11 = 70ksps最高采样率200ksps,此时AD0SC = ?11系统时钟频率AD0SC + 1AD时钟频率=D7D6D5D4D3D2D1D0复位值AD0SCAD0LJST -11111000嵌入式系统应用技术2.3 ADC相关寄存器续2)ADC0CN:控制寄存器 地址=0 xE8,可位寻址AD0EN(ADC允许):1=允许ADCAD0TM(跟踪方式) :0=正常方式,一直跟踪 AD0INT(结束标志) :1=AD转换结束AD0BUSY(忙标志):假设 AD0CM000,AD0BUSY置1则启动AD
11、转换AD0CM(启动方式):000=向AD0BUSY 写1时启动AD转换 D7D6D5D4D3D2D1D0复位值AD0EN AD0TM AD0INT AD0BUSY 略 AD0CM 00000000写入1AD0BUSY转换结束启动方式0:嵌入式系统应用技术2.4 ADC 输入引脚配置留意:作为 ADC 输入的引脚应:配置为模拟输入( PnMDIN对应位置 0 ),使交叉开关跳过如果是P0.0-P2.3,PnSKIP对应位置 1 ) 。嵌入式系统应用技术2.5 A/D转换实例例题:按图在C8051F310目标板的J6上接一个电位器,要求:向P2.5输出高电平(=VDD),从P2.4读入模拟电压。
12、当输入电压小于VDD一半时,发光管D2慢闪,否则快闪。C8051F310目标板J6: P2.4P2.5P0.0嵌入式系统应用技术2.5 A/D转换实例续1)#include / C8051F310的SFR定义sbit LED=P33;/ LED位定义sbit P25=P25;/ P2.5位定义bitbKuai;/ 快慢标志/- 延时 -void delay(unsigned long v)while(-v);/- 初始化 -void First(void)PCA0MD &= 0 x40;/ WDTE = 0 (禁止看门狗)P3MDOUT = 0 x08;/ LED=P3.3推挽输出P2MDOU
13、T = 0 x20;/ P2.5推挽输出,给电位器供电P2MDIN = 0 x10;/ P2.4模拟输入AMX0P = 0 x0c;/ 正输入=P2.4AMX0N = 0 x1f;/ 负输入=GNDADC0CF = 0 xf8;/ 右对齐默许)ADC0CN = 0 x00;/ 向 AD0BUSY 写 1 时启动 ADC0 转换默许)REF0CN = 0 x0a;/ VDD作VREF,开偏压AD0EN = 1;/ 允许 ADC0嵌入式系统应用技术2.5 A/D转换实例续2)/- 主程序 -void main(void)unsigned int ad;/ AD转换结果First ();/ 初始化P
14、25 = 1;/ 向电位器送出+3.3V电压while(1)AD0BUSY = 1;/ 启动 ADC0while(!AD0INT);/ 等待AD转换结束AD0INT = 0;/ 清除AD转换结束标志LED = !LED;/ LED闪烁delay(bKuai ? 5000 : 20000);/ 快慢闪ad = ADC0H*256 + ADC0L;/ 读取AD值bKuai = (ad 512);/ 决定快慢嵌入式系统应用技术2.6 提高题(1用电位器改变输入电压,电压越高,D2闪烁越快,直至全亮;电压越低,D2闪烁越慢,直至全暗。(2用C8051F310带动DP-51实验箱,使8个LED流水点亮。
15、当电压大于2/3满量程,LED左向流动,当电压1/32/3满量程,LED闪烁,当电压小于1/3满量程,LED右向流动。嵌入式系统应用技术实例3 温度测量n3.1 片内温度传感器简介n3.2 温度测量实例n3.3 提高题嵌入式系统应用技术3.1 片内温度传感器简介n要使用内部温度传感器,REF0CN.2TEMPE必须置1。n正端输入 AMX0P=0 x1E,选择温度传感器n负端输入 AMX0N=0 x1F,选择GNDn温度传感器的传输函数 :mV温度=3.35*(温度)+897mVVINVREFAD值 = ( ) * 1024当Vref = VDD = 3.3V时,1 - 3.35mV- 3.3
16、5/3300*1024=1.04 AD值嵌入式系统应用技术3.2 温度测量实例例题:利用C8051F310目标板,编程测量环境温度。当温度较低如低于20)时,发光管D2慢闪,否则快闪。解:Vref = VDD = 3.3V20的mV温度=3.35*20+897=964mV20的AD值=964/3300*1024=351C8051F310目标板C8051F310片内温度传感器嵌入式系统应用技术3.2 温度测量实例续1)#include / C8051F310的SFR定义sbit LED=P33;/ LED位定义bitbKuai;/ 快慢标志/- 延时 -void delay(unsigned l
17、ong v)while(-v);/- 初始化 -void First(void)PCA0MD &= 0 x40;/ WDTE = 0 (禁止看门狗)P3MDOUT = 0 x08;/ LED=P3.3推挽输出P2MDOUT = 0 x20;/ P2.5推挽输出,给电位器供电P2MDIN = 0 x10;/ P2.4模拟输入AMX0P = 0 x1e;/ 正输入=温度传感器AMX0N = 0 x1f;/ 负输入=GNDADC0CF = 0 xf8;/ 右对齐默许)ADC0CN = 0 x00;/ 向 AD0BUSY 写 1 时启动 ADC0 转换默许)REF0CN = 0 x0e;/ Vref=
18、VDD,允许温度传感器,开偏压AD0EN = 1;/ 允许 ADC0嵌入式系统应用技术3.2 温度测量实例续2)/- 主程序 -void main(void)unsigned int ad;/ AD转换结果First ();/ 初始化while(1)AD0BUSY = 1;/ 启动 ADC0while(!AD0INT);/ 等待AD转换结束AD0INT = 0;/ 清除AD转换结束标志LED = !LED;/ LED闪烁delay(bKuai ? 5000 : 20000); / 快慢闪ad = ADC0H*256 + ADC0L;/ 读取AD值bKuai = (ad 351);/ 决定快慢,
19、根据实际情况修改嵌入式系统应用技术3.3 提高题(1用手指给C8051F310加温,温度越高D2闪烁越快。(2用C8051F310带动DP-51实验箱,使8个LED流水点亮。温度越高,流动越快。嵌入式系统应用技术实例4 定时器及中断n4.1 定时器的时钟n4.2 定时器的相关寄存器n4.3 定时器的初值n4.4 定时器中断实例n4.5 提高题嵌入式系统应用技术4.1定时器的时钟内部振荡频率=24.5MHz,系统时钟=24.5MHz / 振荡器分频T0时钟=系统时钟 / 定时器分频内部振荡24.5MHzOSCICN:IFCN振荡器分频定时器分频CKCON :T0M、SCAT0时钟系统时钟嵌入式系
20、统应用技术4.2 定时器的相关寄存器内部振荡频率=24.5MHz,系统时钟=24.5MHz / 振荡器分频OSCICN:内部振荡器控制寄存器IOSCEN:1=内部振荡器使能。IFRDY:内部振荡器就绪标志。1=就绪IFCN :内部振荡器到SYSCLK的分频位缺省分频数为8。系统时钟=24.5/8=3.0625MHzD7D6D5D4D3D2D1D0复位值IOSCENIFRDY略略略略IFCN11000000IFCNSYSCLK=0024.5MHz/80124.5MHz/41024.5MHz/21124.5MHz/1嵌入式系统应用技术4.2 定时器相关的寄存器续1)T0时钟=系统时钟 / 定时器分
21、频CKCON :时钟控制寄存器T1M:类似于T0M。T0M:0=T0时钟由分频位SCA决议。 1=T0时钟为系统时钟SCA:T0、T1 分频位D7D6D5D4D3D2D1D0复位值略略略略T1MT0MSCA00000000SCAT0、T1时钟00系统时钟/1201系统时钟/410系统时钟/4811外部时钟/8嵌入式系统应用技术4.3定时器的初值例如:振荡器分频=1,T0分频=12,求定时10ms的初值=?振荡器分频=1:OSCICN |= 0 x03;SYSCLK=24.5MHzT0分频=12(默许):CKCON = 0 x00;T0时钟=24.5/12=2.0417MHz10ms计数=100
22、00(us) * 2.0417(次/us)= 20417T0初值=65536 - 20417内部振荡24.5MHzOSCICN:IFCN振荡器分频定时器分频CKCON :T0M、SCAT0时钟嵌入式系统应用技术4.4 定时器中断实例例题:用定时器及中断功能,构造C8051F310应用程序框架,具有1ms、10ms、100ms、1s函数调用。利用程序框架,编制发光管D2每秒亮100ms的程序。100ms1s嵌入式系统应用技术4.4 定时器中断实例续1)#include / C8051F310的SFR定义/ T0时钟=24.5/12=2.0417MHz,10ms计数=10000(us)*2.041
23、7(次/us)=20417#defineT0_VAL(65536-20417)/ T0初值sbitLED=P33;/ LED位定义bitb10ms;/ 10ms标志unsigned char Cnt10ms;/- 初始化 -void First(void)PCA0MD &= 0 x40;/ WDTE = 0 (禁止看门狗)P3MDOUT = 0 x08;/ LED=P3.3推挽输出OSCICN |= 0 x03;/ SYSCLK=24.5MHzCKCON = 0 x00;/ 默认值:T0=系统时钟/12TMOD = 0 x01;/ T0方式1TH0 = T0_VAL / 256;TL0 = T
24、0_VAL % 256;TR0 = 1;/ 启动T0ET0 = 1;EA = 1;嵌入式系统应用技术4.4 定时器中断实例续2)/- 10ms处理 -void do_10ms(void)/- 100ms处理 -void do_100ms(void)/- 1s处理 -void do_1s(void)LED = !LED;/ LED 亮1秒、暗1秒嵌入式系统应用技术4.4 定时器中断实例续3)/- 主程序 -void main(void)First ();/ 初始化while(1)if(b10ms)b10ms = 0;do_10ms();if(Cnt10ms % 10 = 0)do_100ms()
25、;if(+Cnt10ms = 100)Cnt10ms=0;do_1s();嵌入式系统应用技术4.4 定时器中断实例续4)/- 定时中断 10ms -void T0_Int(void)interrupt 1TH0 = T0_VAL / 256;TL0 = T0_VAL % 256;b10ms = 1;留意:中断函数定义函数名任意,加上 interrpt n修饰,n为中断号,T0中断为1号中断。中断函数的入口参数、出口参数均为void。嵌入式系统应用技术4.4 定时器中断实例续5)要实现LED每秒亮100ms的效果,只要每秒点亮LED,每100ms熄灭LED即可。/- 100ms处理 -void
26、do_100ms(void)LED = 0;/ 熄灭LED/- 1s处理 -void do_1s(void)LED = 1;/ 点亮LED嵌入式系统应用技术4.5 提高题(1用DP-51实验箱,使LED1以1秒闪烁, LED2以2秒闪烁, LED2LED8流水点亮。嵌入式系统应用技术实例5 UART应用n5.1 交叉开关n5.2 交叉开关相关的寄存器n5.3 波特率n5.4 UART应用实例n5.5 UART应用实例bn5.6 提高题嵌入式系统应用技术n数字交叉开关原理框图嵌入式系统应用技术5.1 交叉开关P0.0P2.3管脚,通过交叉开关,分配给GPIO或数字外设UARTSMBus等P0.0
27、7P1.07P2.03交叉开关P0.0脚P2.4脚P3.4脚P2.47P3.04。P2.3脚.XBR0,XBR1,PnSKIP.嵌入式系统应用技术5.1 交叉开关续1)n交叉开关:优先权交叉开关译码器n某些数字资源如UART、SMBus等需要引脚,交叉开关为其分配引脚。n从P0.0到P2.3按顺序分配UART0总是使用P0.4和P0.5)。nPnSKIP中被置1的那些位,将被跳过。如用于VREF、模拟输入、晶振或 GPIO 的引脚。嵌入式系统应用技术5.1 交叉开关续2)没有引脚被跳过PnSKIP=0 x00的交叉开关优先权译码表 嵌入式系统应用技术5.1 交叉开关续3)晶体引脚被跳过的交叉开
28、关优先权译码表 嵌入式系统应用技术5.2 交叉开关相关的寄存器XBR0:交叉开关寄存器0SMB0E :SMBus I/O 使能位,1=连到端口引脚。URT0E :UART I/O 使能位,1=连到端口引脚。其他省略位:其他数字外设使能。XBR1:交叉开关寄存器1XBARE :交叉开关使能位。要使用交叉开关,应使XBARE=1。其他省略位:其他数字外设使能。D7D6D5D4D3D2D1D0复位值略略略略略SMB0E略URT0E00000000D7D6D5D4D3D2D1D0复位值略XBARE略略略略略略00000000嵌入式系统应用技术5.3 波特率使用内部振荡器时的波特率内部振荡24.5MHz
29、OSCICN:IFCN振荡器分频定时器分频CKCON :T1M、SCAT1时钟系统时钟T1定时溢出溢出T1:方式2波特率2T1时钟嵌入式系统应用技术5.3 波特率续1)UART0 波特率公式:波特率 = 2例:振荡器分频=1,T1分频=12,波特率=9600,求T1的初值=?解:振荡器分频=1:OSCICN |= 0 x03;SYSCLK=24.5MHzT1分频=12 (默许) :CKCON = 0 x00; T1时钟=24.5/12=2.0417MHz波特率 = 9600T1计数值 = 2041700 / 9600 / 2 = 106T1初值 = 256 106 = 150T1CLK(256
30、-T1H)嵌入式系统应用技术RS-2325.4 UART应用实例例题:C8051F310通过串口发送一些信息。通过电脑运行的串口调试软件显示这些信息。C8051F310目标板C8051F310嵌入式系统应用技术5.4 UART应用实例续1)#include / C8051F310的SFR定义#include / 可以使用printf等函数#defineT0_VAL(65536-20417)/ T0初值sbitLED=P33;/ LED位定义bitb10ms;/ 10ms标志unsigned char Cnt10ms;/- 初始化 -void First(void)PCA0MD &= 0 x40
31、;/ WDTE = 0 (禁止看门狗)P3MDOUT = 0 x08;/ LED=P3.3推挽输出CKCON = 0 x00;/ 默认值:T0=系统时钟/12TMOD = 0 x21;/ T1方式2,T0方式1TH0 = T0_VAL / 256;TL0 = T0_VAL % 256;TR0 = 1;/ 启动T0ET0 = 1;EA = 1;嵌入式系统应用技术5.4 UART应用实例续2)/- UART初始化 -void UART_init(void)OSCICN |= 0 x03;/ SYSCLK=24.5MhzXBR0 = 0 x01;/ 交叉开关0:允许UARTXBR1 = 0 x40;
32、/ 交叉开关1:允许XBARSCON0 = 0 x10;/ SCON0: 8位,允许接收,TH1 = (256-106);/ 波特率=9600TL1 = TH1; TR1 = 1;/ 启动 Timer1TI0 = 1;/ TI 发送完成嵌入式系统应用技术5.4 UART应用实例续3)/- 10ms处理 -void do_10ms(void)/- 100ms处理 -void do_100ms(void)/- 1s处理 -void do_1s(void)LED = !LED;/ LED闪烁printf(“rnHello”);/ 向串口输出字符串嵌入式系统应用技术5.4 UART应用实例续4)/-
33、主程序 -void main(void)UART_init();/ UART初始化First ();/ 初始化while(1)if(b10ms)b10ms = 0;do_10ms();if(Cnt10ms % 10 = 0)do_100ms();if(+Cnt10ms = 100)Cnt10ms=0;do_1s();嵌入式系统应用技术5.4 UART应用实例续5)/- 定时中断 10ms -void T0_Int(void)interrupt 1TH0 = T0_VAL / 256;TL0 = T0_VAL % 256;b10ms = 1;由于系统函数printf()占用资源比较多,建议自己编
34、写简单的字符串输出函数Fs_Str()。嵌入式系统应用技术5.5 UART应用实例b不使用printf函数,自己构建Fs_Str函数:/- 串口发送1字节 -void Fs_1Byte(unsigned char v) SBUF0 = v;while(!TI0);TI0 = 0;/- 串口发送code字符串 -void Fs_Str(unsigned char code *Str) while(*Str)Fs_1Byte(*Str+);去掉头文件#include 在使用printf(“rnHello);的地方,改为Fs_Str(rnHello);嵌入式系统应用技术5.4 UART应用实例续5)
35、无printf、Fs_Str函数时,资源占用:Program Size: data=20.1 xdata=0 code=125用printf函数时,资源占用:Program Size: data=41.2 xdata=0 code=1183推算,printf需要资源:data=41.2-20.1=21.1,code=1183-125=1058用自建Fs_Str函数,资源占用:Program Size: data=23.1 xdata=0 code=194推算, Fs_Str函数需要资源:data=23.1-20.1=3,code=194-125=69嵌入式系统应用技术5.6 提高题(1试将上述
36、例题中的波特率改为4800。(2通过串口,将温度值每秒一次发送到电脑。(3通过串口,发送以下信息:按一次S2,将C8051F310内部RAM的00H7FH单元的内容发送到电脑显示。嵌入式系统应用技术实例6 SMBus应用(24C0X)n6.1 SMBus规范n6.2 24C0X简介n6.3 I2C底层程序n6.4 I2C测试程序(24C0X)n6.5 提高题(24C0X)嵌入式系统应用技术6.1 SMBus规范SMBus与I2C兼容用2根导线传递双向信号:SDA:串行数据SCL:串行时钟典型SMBus 衔接:嵌入式系统应用技术6.1 SMBus规范续1)SMBus规定:SCL=0时,SDA可以
37、变化;SCL=1时,SDA的变化有特殊定义。开始位:SCL=1时,SDA的下跳变。停止位:SCL=1时,SDA的上跳变。数据1:SCL=1时,SDA的1。数据0:SCL=1时,SDA的0。应答ACK:即数据0。应答NACK:即数据1。SCLSDA开始位停止位SCLSDA数据1数据0ACKNACK嵌入式系统应用技术6.1 SMBus规范续2)主器件:发开始位、停止位,发SCL。通常由MCU担任。从器件:听从主器件指挥。通常为各种外围功能芯片。可以有1个主器件,多个从器件。每个从器件有从地址SLA,最低位为读写位,0=写,1=读。例如:I2C接口E2PROM芯片24C0X的从地址为1010000X
38、,(0 xA0)I2C接口键盘及LED驱动ZLG7290的从地址为0111000X,(0 x70)I2C接口日历芯片PCF8563的从地址为1010001X,(0 xA2)主、从器件都可以发送、接纳。接收者负责返回应答信号ACK或NACK一次通讯过程由1个开始位、若干数据字节+应对、1个停止位组成嵌入式系统应用技术6.2 24C0X简介n24C01A/02A/04An1K/2K/4K位的电擦除PROM。n使用标准2线串行接口I2C。n同一总线中最多可连接8个24C01/02或4个24C04。n有硬件写保护功能。24C01A 24C02A 24C04A组织 128825682256 8嵌入式系统
39、应用技术6.3 I2C底层程序例题:以F310为主器件,24C02为从器件为例,编制I2C底层程序和测试程序。1KVCCF310P0.1 SCLP0.0 SDAGND24C02SCL A0SDA A1 A2GND WP嵌入式系统应用技术6.3 I2C底层程序续1)/-口位地址定义-sbitSDA= P00;sbitSCK= P01;/-发送1个开始位-void Start(void)SDA=1; SCK=1;SDA=0;SCK=0;SDA=1;/ 释放SDA/-发送1个停止位-void Stop(void)SDA=0;SCK=1;SDA=1;SCLSDA起始位结束位嵌入式系统应用技术6.3 I
40、2C底层程序续2)bit bACK;/-发出1个NACK,也用于读入ACK -bit TestACK()SDA=1;SCK=1;bACK=SDA;SCK=0;return(bACK);/-发出1个ACK-void I2C_ACK(void)SDA=0;SCK=1;SCK=0;SDA=1;SCLSDANACKACK嵌入式系统应用技术6.3 I2C底层程序续3)/-输出8位。入口 v=发送的数据-void Out8Bit(uchar v)uchar i;for(i=0;i8;i+)SDA=(bit)(v & 0 x80);/ 高位移到SDASCK=1;/ 发1个时钟SCK=0;v=v1;TestA
41、CK();/ 发送SDA=1,以接收ACKSCLSDA写出数据1写出数据0嵌入式系统应用技术6.3 I2C底层程序续4)/- 输入8位。入口:fACK=发送的ACK,前往:接收的数据 -uchar In8Bit(bit fACK)uchar i,v=0;for(i=0;i8;i+)SCK=1;/ 发1个时钟v=v1;v=v | (uchar)(SDA);/ 读SDASCK=0;if(fACK)I2C_ACK();/ 发ACKelseTestACK();/ 发NACKreturn(v);SCLSDA读到数据1读到数据0嵌入式系统应用技术6.3 I2C底层程序续5)MCU写出1字节到E2PROM:
42、从应答主发送0=Wr1 0 1 0 0 0 0 0嵌入式系统应用技术6.3 I2C底层程序续6)/-写出1个字节。入口 Addr=8位地址,v=数据 -void I2C_Wr1By(uchar Addr,uchar v)Start();/ 发送1个开始位Out8Bit(0 xa0);/ 发出器件slave地址,24系列为1010XXX0写Out8Bit(Addr);/ 发送存储单元地址Out8Bit(v);/ 发送写数据Stop();/ 发送1个停止位ACKPol();/ ACK轮询,检查写完成/- ACK轮询,等待写完成。-void ACKPol(void)bACK=1;while(bACK
43、)/ 取EE的ACKStart();/ 发送1个开始位Out8Bit(0 xa0);/ 发写命令,如果器件忙,bACK=1Stop();/ 发送1个停止位嵌入式系统应用技术6.3 I2C底层程序续7)MCU从E2PROM读入1字节:从应答主应答主发送从发送0=Wr1=Rd1 0 1 0 0 0 0 01 0 1 0 0 0 0 1嵌入式系统应用技术6.3 I2C底层程序续8)/-读入1个字节。入口 Addr=8位地址,返回读入数据-uchar I2C_Rd1By(uchar Addr)uchar v;Start();/ 发送1个开始位Out8Bit(0 xa0);/发出器件slave地址,24
44、系列为1010XXX0写Out8Bit(Addr);/ 发送存储单元地址Start();/ 再发送1个重启动命令Out8Bit(0 xa1);/ 发出器件slave地址,24系列为1010XXX1读v=In8Bit(0);/ 读入1字节数据,发NACK,告诉器件要结束了Stop();/ 发送1个停止位return(v);嵌入式系统应用技术6.4 I2C测试程序(24C0X)#include / C8051F310的SFR定义/- 初始化 -void First(void)PCA0MD &= 0 x40;/ WDTE = 0 (禁止看门狗)P0MDOUT = 0 x00;/ P0.0=SDA,P
45、0.1=SCK,OC输出XBR1 = 0 x40;/ 交叉开关1:允许XBAR/- 主程序(测试I2C函数) -void main(void)uchar Addr=0 x02,Wr_v=0 x40,Rd_v;First ();/ 初始化while(1)I2C_Wr1By(Addr,Wr_v);/ 将Wr_v的值写出到Addr地址Rd_v = I2C_Rd1By(Addr);/ 读入Addr地址的值到Rd_vAddr+;Wr_v+;嵌入式系统应用技术6.5 提高题(24C0X)(1通过串口读取24C0X:键入“D0”,显示24C0X的00H0FH单元的内容,键入“D1”,显示24C0X的10H1
46、FH单元的内容,依此类推。(2通过串口读写24C0X:键入一个字符串,以回车结束,保存到24C0X。断电重新启动后,显示一次24C0X中保存的字符串。嵌入式系统应用技术实例7 I2C应用(ZLG7290)n7.1 ZLG7290简介n7.2 F310与ZLG7290的连接n7.3 ZLG7290的驱动n7.4 ZLG7290测试程序n7.5 提高题(ZLG7290)嵌入式系统应用技术7.1 ZLG7290简介n特点nLED/键盘驱动芯片nI2C串行接口,写:0 x70;读:0 x71n可驱动8位共阴数码管和64个按键。n可控扫描位数,可控任一数码管闪烁。n无需外接元件驱动LED。n提供键盘中断
47、。n可检测键的连击次数。嵌入式系统应用技术7.2 F310与ZLG7290的连接C8051F310与ZLG7290连接示意图ZLG7290SDASCLINTRSTF310P10P11P12P13VCC1K位置0嵌入式系统应用技术7.3 ZLG7290的驱动nZLG7290速度较慢,I2C驱动中要加延时n例如:nvoid nop(uchar n)nfor( ;n!=-1;n-);nn/*发送1个启动命令*/nvoid Start(void)nSDA=1;nop(1);nSCK=1;nop(1);nSDA=0;nop(1);nSCK=0;nop(1);nSDA=1;nop(1);n嵌入式系统应用技
48、术7.3 ZLG7290的驱动续1)nZLG7290显示通讯接口:n从地址=0 x70n内部有寄存器0 x000 x17,7、8号是命令接口n在第w个位置处显示v的方法是,连续向7、8号寄存器写入:nDP=1:小数点亮nFlash=1:闪烁n最右边数码管的位置w=0n显示值v=0Fn例如:在第7个位置处显示3:向7、8号送0 x67、0 x03寄存器D7D6D5D4D3D2D1D070110显示位w8DPFlash0显示值v嵌入式系统应用技术7.3 ZLG7290的驱动续2)连续写出n个字节的函数:/ 入口 sla=从地址,Addr=8位地址,*s=指向数据,n=数据个数void I2C_Wr
49、nBy(uchar sla,uchar Addr,uchar data *s,uchar n)uchar i;Start();/ 发送1个开始位Out8Bit(sla);/ 发出器件slave地址,ZLG7290为0 x70Out8Bit(Addr);/ 发送存储单元地址for(i=0;in;i+) / 连续n次Out8Bit(*s+);/ 发送写数据 Stop();/ 发送1个停止位嵌入式系统应用技术7.3 ZLG7290的驱动续3)zlg7290 显示命令(在第w位,显示v):#define ZLG7290_sla 0 x70/ZLG7290的从地址=0 x70void ZLG7290_D
50、isp(uchar w,uchar v)uchar Data2;Data0=0 x60+w;Data1=v;I2C_WrnBy(ZLG7290_sla,0 x07,Data,2);Delay(10);例如:在第7个位置处显示3:ZLG7290_Disp(7, 3);嵌入式系统应用技术7.3 ZLG7290的驱动续4)ZLG7290键盘通讯接口:当有按键时,ZLG7290发出INT=01号寄存器为键值寄存器,0=无键,116=键值。读键程序:sbit KEY_INT =P12;uchar key;if(KEY_INT=0) key=I2C_Rd1By(ZLG7290_sla,1);/ 从1号寄存
51、器读入键值ZLG7290_Disp(0,key);/ 在第0位处,显示键值嵌入式系统应用技术7.3 ZLG7290的驱动续4)ZLG7290的复位:初始化时做一次,向RST发出一个负脉冲,延时一段时间,等待ZLG7290完成复位。复位函数:sbit ZLG_RST =P13; / ZLG_RST管脚要上拉1K电阻,抗干扰/- zlg7290 复位 -void ZLG7290_reset(void) ZLG_RST=0;Delay(1);ZLG_RST=1;Delay(200);嵌入式系统应用技术7.4 ZLG7290测试程序先在数码管上显示“76543210”,然后,每按一键,在第0位置处显示
52、键值。void main(void)uchar i,key;First ();/ 初始化ZLG7290_reset();for(i=0;i8;i+) ZLG7290_Disp(i,i);/ 在第i位处,显示i值while(1) if(KEY_INT=0) key=I2C_Rd1By(ZLG7290_sla,1);/ 从1号寄存器读入键值ZLG7290_Disp(0,key);/ 在第0位处,显示键值嵌入式系统应用技术7.5 提高题(ZLG7290)(1在右边3个数码管上显示一个0255的计数值,每0.1秒增1。(2在上题基础上,增加以下功能:当按过1号键,每0.1秒增1 ;按过2号键,每0.1秒减1 。嵌入式系统应用技术实例8 I2C应用(PCF8563T)n8.1 PCF8563T简介n8.2 F310与PCF8563T的连接n8.3 PCF8563T的驱动n8.4 PCF8563T测试程序n8.5 提高题(PCF8563T)嵌入式系统应用技术8.1 PCF8563T简介n特点n实时时钟日历芯片,nI2C串行接口,写:0 xA2;读:0 xA3 n可编程时钟输出,n报警和定时器.嵌入式系统应用技术8.2 F310与PCF8563T的连接C8051F310与PCF8563T连接示意图PCF8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利工程生产安全重大事故隐患治理延期申请表、单位自验表、法人单位组织验收表、本级水行政主管部门、挂牌督办单位验收表
- 《环境监测》本科题集
- 2025高考语文专项复习:文学类文本阅读之物象的作用
- WPS办公应用(高级)习题及答案 ch2 创意演示稿的制作
- 强化支行内部管理-为支行的生存发展铺平道路
- 2023年高压自动分段器资金筹措计划书
- 建设用地重金属污染土壤处置后安全利用技术规范(征求意见稿)编制说明
- Python程序设计实践- 习题及答案 ch11 实验7 列表与元组
- 名句名篇默写(解析版)-2024-2025学年九年级语文上学期期中试题分类汇编(山东专用)
- 高三数学教学经验交流发言稿(14篇)
- 北京市海淀区2024-2025学年高三第一学期期中练习语文试卷含答案
- 刘润年度演讲2024
- (完整版)英语名词单复数练习题带答案
- 国学情景剧剧本
- 煤矿皮带智能化集控系统PPT教学讲授课件
- 分数乘除法整理复习(课堂PPT)
- 杭州会展业发展与对策研究文献综述
- 完整版方法验证报告模板最终
- 电力管道资料表格(共30页)
- 大班科学活动教案《豆豆家族》含PPT课件
- 【精品试卷】部编人教版(统编)一年级上册语文第一单元测试卷含答案
评论
0/150
提交评论