1、C程序设计中使用指针可以:使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值C语言知识语言知识(161页页):指针:指针1谢谢欣赏2019-7-131 1、变量与地址、变量与地址地址地址 内存内存0 x000 x30350 x31560 x32780 x33120 x34340 x35560 x3678如变量声明如下如变量声明如下(默认存储在内存默认存储在内存):ijk编译编译(对于全局变量对于全局变量)或函或函数调用数调用(对于全局变量对于全局变量)时时根据变量的类型为其分配根据变量的类型为其分配地址,地址,具体地址,我们不具体地址,我们不必关心。必关心。首地
2、址就是该变首地址就是该变量的地址量的地址内存中每个字内存中每个字节有一个编号节有一个编号-地址地址首地址就是该变量首地址就是该变量的地址的地址 就像院长只知道我院有多少学生宿舍,但并不关心哪个学生住哪个宿舍一样。一个字符型变量分配一字节(char)内存单元,一个整型(int)变量分配两字节内存单元,一个长整型变量分配4字节内存单元。2谢谢欣赏2019-7-13地址地址外存外存0 x00000 x2000350 x2001560 x2002780 x2003120 x2004340 x2005560 x200678如变量声明如下如变量声明如下(定义在外存定义在外存):ijk首地址就是首地址就是该
3、变量的地该变量的地址址 外存外存,64K字节字节地址:地址:0 x0000-0 xFFFF编译编译(对于全局变量对于全局变量)或函数调用或函数调用(对于全局对于全局变量变量)时根据变量的类时根据变量的类型为其分配型为其分配地址地址,具具体地址,我们不必关体地址,我们不必关心。首地址就是该变心。首地址就是该变量的地址量的地址3谢谢欣赏2019-7-13地址地址外存外存0 x00000 x2000350 x2001560 x2002780 x2003120 x3000 xx0 x3001xxijk2、指针、指针通过变量名获取变量值,是变量的基本通过变量名获取变量值,是变量的基本使用方法使用方法直接
4、访问。直接访问。通过对变量地址的访问,获取变量的值通过对变量地址的访问,获取变量的值间接访问。间接访问。要访问变量的地址就涉及到了指针。要访问变量的地址就涉及到了指针。就本质而言,就本质而言,指针就是地址。指针就是地址。以定义在外部存储器变量为对象,具体以定义在外部存储器变量为对象,具体说明指针的概念说明指针的概念 例例3412间接访问,使用于访问数组、字符串(间接访问,使用于访问数组、字符串(有序存储的有序存储的“一串数据一串数据”,“一片存储一片存储区区”)。)。4谢谢欣赏2019-7-13指针变量指针变量指针变量的定义指针变量的定义指针变量是用来存储地址值的变量。首先,指针变量本身也是变
5、量,其次,指针变量的值只能是地址(16bit,占2两个字节)。类型名*指针变量名;例如:指针(变量)将指针(变量)将来来只能指向整型只能指向整型变量,即:变量,即:指针变量的类型,应和它指向的对象类型匹配一致“*”是指针是指针(变量)的(变量)的标示符,标示符,指指针(变量)针(变量)是是k,k,而不是而不是*k!k!一般不赋初值,无实际意义5谢谢欣赏2019-7-13指针变量的指向指针变量的指向指针变量赋值,就是获取指向“某变量地址”的过程。例如:例如:0 x00000 x2000350 x2001560 x2002780 x2003120 x3000 xx0 x3001xx0020041E
6、ij指针变量指针变量k0 x78122是1E04指针变量指针变量k k,指向,指向整型变量整型变量i i,k k的的值就是值就是i i的地址的地址“&”“取地取地址址”运算符运算符“*k”是变量i。“k”是变量i的地址不必关心不必关心k k的地址的地址6谢谢欣赏2019-7-13第第7 7章章 ADAD转换器的控制转换器的控制 7.1.1 7.1.1 AD AD转换器转换器7.1 7.1 概述概述AD转换器即ADC(Analog to Digital Converter),是能将模拟量转换为数字量的器件。7.1.2 7.1.2 AD AD转换分辨率(分解度)转换分辨率(分解度)常用转换结果的二
7、进制数的位数来表示。位数越大,分辨率越高。例:模拟量的变化范围:例:模拟量的变化范围:0V-5V0V-5V,ADAD转换器分辨率是转换器分辨率是8 8位。位。5V/28=5V/2560.02V=20mV经经8 8位位ADAD转换器,能区别的最小输入电压转换器,能区别的最小输入电压(也就是数字量也就是数字量1 1对应对应的电压的电压)为:为:经经1212位位ADAD转换器,能区别的最小输入电压为:转换器,能区别的最小输入电压为:5V/212=5V/40690.0012V=1.2mV 7谢谢欣赏2019-7-137.2.3 AD7.2.3 AD转换时间转换时间 即完成一次AD转换所用的时间输出的数
8、字量为:)12(nREFAVVDNA/D转换器的位数 参考电压 模拟输入电压 8谢谢欣赏2019-7-137.2 ADC08097.2 ADC08097.2.1 ADC08097.2.1 ADC0809介绍介绍 1234ABCD4321DCBATitleNumberRevisionSizeA4Date:8-Jul-2012 Sheet of File:D:C51_JIA_MA教学用电路图.DdbDrawn By:IN-026msb2-1212-220IN-1272-3192-418IN-2282-582-615IN-312-714lsb2-817IN-42EOC7IN-53ADD-A25IN-
9、64ADD-B24ADD-C23IN-75ALE22ref(-)16ENABLE9START6ref(+)12CLOCK10U1ADC08098路模拟通道输入 8位,8路通道,转换时间100s 参考电压输入8位数字量输出 模拟通道地址输入 转换结束输出端 转换启动信号输入 时钟输入端 地址锁存输入 输出允许输入 9谢谢欣赏2019-7-13地址稳定的模拟量ADDADDALEALEAINAINSTARTSTARTEOCEOCOEOE数字量DOUTDOUT ADC0809 ADC0809时序时序完成一次完成一次A/DA/D,最多需要,最多需要1010个时钟(个时钟(8 8位逐次渐进位逐次渐进A/D
10、A/D)不必关心)不必关心!先准备好先准备好地址,再地址,再锁存地址锁存地址启动转换之前启动转换之前及转换期间,及转换期间,模拟量必须稳模拟量必须稳定定启动转换后,启动转换后,EOC=0,表,表示正在转换示正在转换EOC=1EOC=1,表示,表示转换结束转换结束ENABLE=0ENABLE=0,数据,数据线为线为“高阻高阻”单片机单片机“发发现现”EOC=1EOC=1后,后,置置ENABLE=1ENABLE=1,数,数据线输出数字量据线输出数字量ENABLE=0ENABLE=0,数据,数据线为线为“高阻高阻”10谢谢欣赏2019-7-13功能要求:功能要求:用ADC0809实现一路A/D数模转
11、换,并用LCD显示。7.2.2 ADC08097.2.2 ADC0809应用实例应用实例1 1(查询)(查询)1、硬件连接(电路)地址稳定的模拟量ADDADDALEALEAINAINSTARTSTART从时序图可以看到,ALE上升沿锁存地址,START下降沿启动A/D必须先锁存地址,再启动A/D,因而这两个信号可以“合并”。11谢谢欣赏2019-7-131234ABCD4321DCBAT itleN um berR evisionSizeA 4D ate:9-Jul-2012 Sheet of File:D:C 51_JIA _M A 教 学 用 电 路 图.D dbD raw n B y:E
12、 A/V P31X 119X 218R E SE T9R D17W R16IN T 012IN T 113T 014T 115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSE N29A L E/P30T X D11R X D10U 1A T 89C 51+5VG N DG N DIN-026m sb2-1212-220IN-1272-3192-418IN-2282-582-615IN-312-714lsb2-817
13、IN-42E O C7IN-53A D D-A25IN-64A D D-B24A D D-C23IN-75A L E22ref(-)16O E9ST A R T6ref(+)12C L O C K10U 2A D C 0809C L K3D2SD4CD1Q5Q6U 3A74H C 74C L K11D12SD10CD13Q9Q8U 3B74H C 74+5V+5V+5V+5VR W10K晶振12M、复位电路未画出显示电路未画出显示电路未画出要求较高时要用专用基准源,价格较高4分频降低频率,以满降低频率,以满足足ADC0809ADC0809的要求的要求晶振12M输出2M的脉冲500K时钟脉冲只用
14、通道0ENABLE和START共用上拉电阻12谢谢欣赏2019-7-132.2.软件软件 1234ABCD4321DCBAT itleN um berR evisionSizeA 4D ate:9-Jul-2012 Sheet of File:D:C 51_JIA _M A 教 学 用 电 路 图.D dbD raw n B y:E A/V P31X 119X 218R E SE T9R D17W R16IN T 012IN T 113T 014T 115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P07
15、32P2021P2122P2223P2324P2425P2526P2627P2728PSE N29A L E/P30T X D11R X D10U 1A T 89C 51+5VG N DG N DIN-026m sb2-1212-220IN-1272-3192-418IN-2282-582-615IN-312-714lsb2-817IN-42E O C7IN-53A D D-A25IN-64A D D-B24A D D-C23IN-75A L E22ref(-)16O E9ST A R T6ref(+)12C L O C K10U 2A D C 0809C L K3D2SD4CD1Q5Q6U
16、3A74H C 74C L K11D12SD10CD13Q9Q8U 3B74H C 74+5V+5V+5V+5VR W10KI/OI/O口定义口定义 13谢谢欣赏2019-7-13地址稳定的模拟量ADDADDALEALEAINAINSTARTSTARTEOCEOCOEOE数字量DOUTDOUT编程编程:就是实现时序图就是实现时序图 14谢谢欣赏2019-7-13功能要求:功能要求:ADC0809实现八路A/D数模转换(数据采集)。7.2.3 ADC08097.2.3 ADC0809应用实例应用实例1 1(总线、中断、指针)(总线、中断、指针)将ADC0809视为内存单元利用数据总线/地址总线交
17、换信息(控制/读取数据)电路15谢谢欣赏2019-7-131234ABCD4321DCBATitleNumberRevisionSizeA4Date:10-Jul-2012Sheet of File:D:C51_JIA_MA教学用电路图.DdbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29AL
18、E/P30TXD11RXD10U1AT89C51GNDOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165Q156Q147Q138Q12U374HC573123U4A456U4B8910U4C74HC02AD0AD1AD2AD0AD1AD2AD3AD4AD5AD6AD7IN-026D721D620IN-127D519D418IN-228D38D215IN-31D114D017IN-42EOC7IN-53ADD-A25IN-64ADD-B24ADD-C23IN-75ALE22ref(-)16OE9START6ref(+)12CLOCK10U2ADC080
19、916谢谢欣赏2019-7-13A15.A8A7.0ALEALE/RD/RDP0P0P2P2DATA IN时序是由单片机执行读外部数据存储器时时序是由单片机执行读外部数据存储器时“自动自动”完成完成AT89C51AT89C51读外部数据存储器的时序读外部数据存储器的时序高阻P0口先输出存储器的低8位地址A7.0P2口输出存储器的高8位地址A15.8P0口从存储器读数据将A7.0锁存在74HC573中读:通知外存将数据送到端口17谢谢欣赏2019-7-13A15.A8A7.0ALEALE/WR/WRP0P0P2P2DATA OUTAT89C51AT89C51写外部数据存储器的时序写外部数据存储器
20、的时序高阻P0口先输出存储器的低8位地址P2口输出存储器的高8位地址写:通知外存,存储数据将A7.0锁存在74HC573中锁存地址后P0口输出数据时序是由单片机执行写外部数据存储器时时序是由单片机执行写外部数据存储器时“自动自动”完成完成18谢谢欣赏2019-7-131234ABCD4321DCBATitleNumberRevisionSizeA4Date:10-Jul-2012Sheet of File:D:C51_JIA_MA教学用电路图.DdbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P13
21、4P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89C51GNDOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165Q156Q147Q138Q12U374HC573123U4A456U4B8910U4C74HC02AD0AD1AD2AD0AD1AD2AD3AD4AD5AD6AD7IN-026D721D620IN-127D519D418IN-228D38D2
22、15IN-31D114D017IN-42EOC7IN-53ADD-A25IN-64ADD-B24ADD-C23IN-75ALE22ref(-)16OE9START6ref(+)12CLOCK10U2ADC0809网络标号,同一标号是接在一起的时钟电路未画转换结束时,产生上升沿实现反相下降沿触发中断低8位地址锁存,固定接法!或非门高8位地址只用了A15(P2.7)执行一次写操作,产生一个正脉冲执行一次读操作,产生一个正脉冲读写信号通常是119谢谢欣赏2019-7-131234ABCD4321DCBATitleNumberRevisionSizeA4Date:10-Jul-2012Sheet of
23、 File:D:C51_JIA_MA教学用电路图.DdbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89C51GNDOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165Q156Q147Q138Q12U374H
24、C573123U4A456U4B8910U4C74HC02AD0AD1AD2AD0AD1AD2AD3AD4AD5AD6AD7IN-026D721D620IN-127D519D418IN-228D38D215IN-31D114D017IN-42EOC7IN-53ADD-A25IN-64ADD-B24ADD-C23IN-75ALE22ref(-)16OE9START6ref(+)12CLOCK10U2ADC0809地址:0 x7ff8-0 x7fffP2:01111111P0:11111000 -11111111高8位地址只用了A15(P2.7)执行一次写操作,产生一个正脉冲执行一次读操作,产生一
25、个正脉冲读写信号通常是1不使用的不使用的“位位”统统置统统置1,一是,一是,可以减小功耗;可以减小功耗;二是不影响这些二是不影响这些位做输入位做输入20谢谢欣赏2019-7-131234ABCD4321DCBATitleNumberRevisionSizeA4Date:10-Jul-2012Sheet of File:D:C51_JIA_MA教学用电路图.DdbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P05
26、34P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89C51GNDOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165Q156Q147Q138Q12U374HC573123U4A456U4B8910U4C74HC02AD0AD1AD2AD0AD1AD2AD3AD4AD5AD6AD7IN-026D721D620IN-127D519D418IN-228D38D215IN-31D114D017IN-42EOC7IN-53ADD-A25IN-64ADD-
27、B24ADD-C23IN-75ALE22ref(-)16OE9START6ref(+)12CLOCK10U2ADC08090 0写操作,只有写操作,只有P2.7(A15)和和/WR(写写)信号起作用信号起作用?,目的(,目的(1)将已)将已锁存在锁存在74HC573的低三位地址锁存(上升沿)到的低三位地址锁存(上升沿)到ADC0809;(2)启启动动(下降沿)下降沿)ADC0809ADC080921谢谢欣赏2019-7-131234ABCD4321DCBATitleNumberRevisionSizeA4Date:10-Jul-2012Sheet of File:D:C51_JIA_MA教学用
28、电路图.DdbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89C51GNDOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165Q156Q147Q138Q12U374HC573123U4A456U4B8910U
29、4C74HC02AD0AD1AD2AD0AD1AD2AD3AD4AD5AD6AD7IN-026D721D620IN-127D519D418IN-228D38D215IN-31D114D017IN-42EOC7IN-53ADD-A25IN-64ADD-B24ADD-C23IN-75ALE22ref(-)16OE9START6ref(+)12CLOCK10U2ADC08090 0读操作,只有读操作,只有P2.7(A15)和和/RD(写写)信号起作用信号起作用,只是为只是为ADC0809的的/OE提提供一个正脉冲(高供一个正脉冲(高电平期间将结果送电平期间将结果送到数据线上到数据线上22谢谢欣赏2019-7-13程序23谢谢欣赏2019-7-1324谢谢欣赏2019-7-1325谢谢欣赏2019-7-13不必设置优先级。不必设置优先级。50mS定时器定时器0中断一次,中中断一次,中断断20次即一秒,启动一次次即一秒,启动一次A/D,转换时间约,转换时间约0.02mSmS,转换转换结束产生外部中断结束产生外部中断0,等,等待(待(1秒)再次启动,因而不秒)再次启动,因而不会同时产生中断会同时产生中断26谢谢欣赏2019-7-1327谢谢欣赏2019-7-13主函数初始化后,”就没事做啦”(待机)28谢谢欣赏2019-7-13