1 / 51

第五讲: 接口与系统 扩展( 2 )

第五讲: 接口与系统 扩展( 2 ). 本讲重点: 键盘接口(键盘种类 , 矩阵键盘的行扫描与 线反转法的电路、原理与编程) ; D/A 转换接口( DAC0832 产生各种波形) ; A/D 转换接口( ADC0809 三种读取方式 , 电路 及单路采集与多路采集编程应用). 扩展键盘接口. 四、 键盘接口 P.194. 键盘 单片机系统中完成控制参数输入及修改的 基本输入设备 ,是人工干预系统的重要手段。. 单片机与计算机在键盘规模 / 键符设置等方面差别很大。. 键盘分类

goro
Download Presentation

第五讲: 接口与系统 扩展( 2 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五讲:接口与系统扩展(2) 本讲重点: 键盘接口(键盘种类,矩阵键盘的行扫描与 线反转法的电路、原理与编程); D/A转换接口(DAC0832产生各种波形); A/D转换接口(ADC0809三种读取方式,电路 及单路采集与多路采集编程应用).

  2. 扩展键盘接口

  3. 四、键盘接口P.194 键盘 单片机系统中完成控制参数输入及修改的基本输入设备,是人工干预系统的重要手段。 单片机与计算机在键盘规模/键符设置等方面差别很大。 键盘分类 @按键值编码方式分 (硬件)编码键盘与非(硬件)编码键盘。 @按键组连接方式分 独立连接键盘与矩阵连接键盘。

  4. 按键值编码方式:编码键盘与非编码键盘 编码键盘:采用专用的编码/译码器件,被按下的键由该器件译码输出相应的键码/键值。 特点:增加了硬件开销,编码因选用器件而异,编码固定,但编程简单。适用于规模大的键盘。 非编码键盘:单片机系统多采用此类键盘 采用软件编/译码的方式,通过扫描,对每个被按下的键判别输出相应的键码/键值。 特点:不增加硬件开销,编码灵活,适用于小规模的键盘,特别是单片机系统。但编程较复杂,占CPU时间,还须软件“消颤”。

  5. 按键组连接方式:独立连接键盘与矩阵连接键盘按键组连接方式:独立连接键盘与矩阵连接键盘 独立连接键盘:每键相互独立,各自与一条I/O线相连,CPU可直接读取该I/O线的高/低电平状态。 特点:占I/O口线多,但判键速度快,多用于设置控制键、功能键。适用于键数少的场合。 矩阵连接键盘: 键按矩阵排列,各键处于矩阵行/列的结点处,CPU通过对连在行(列)的I/O线送已知电平的信号,然后读取列(行)线的状态信息。逐线扫描,得出键码。 特点:键多时占用I/O口线少,但判键速度慢,多用于设置数字键。适用于键数多的场合。

  6. 独立连接式键盘例1: KEY: JNB P1.0,FUNC1 ;逐键判别 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.3,FUNC4 RET ;无任何键按下由此返回 FUNC1: ……;做P1.0要求的“功能1” RET FUNC2: ……;做P1.1要求的“功能2” RET FUNC3: ……;做P1.2要求的“功能3” RET FUNC4: ……;做P1.3要求的“功能4” RET P1.0P1.1P1.2P1.3 AT89C51 特点:此子程序需不断(或定时)调用,否则可能漏判。4个键的优先级由指令顺序决定。

  7. 独立连接式键盘例2 (上拉) P1.0P1.1P1.2P1.3 ORG 0003H LJMP KEY ………… KEY: JNB P1.0,FUNC1 ;逐键判别 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.3,FUNC4 RETI ;无任何键按下由此返回 FUNC1: ……;做P1.0要求的“功能1” RETI FUNC2: ……;做P1.1要求的“功能2” RETI FUNC3: ……;做P1.2要求的“功能3” RETI FUNC4: ……;做P1.3要求的“功能4” RETI & AT89C51 INT0 特点: @此子程序采用中断 查询不会漏判,省时。 @键的优先级由指令 顺序决定。 @为防止一次按键多 次中断,在功能子程 序里应安排“关/开中 断指令”并“延时”。

  8. 矩阵式键盘 P.198例 PA7PA6PA5PA4PA3PA2PA1PA0 AT89C51 8155 AD0-7 P0 ALE ALE P2.7 CE P2.0 IO/M WR WR +5v RD RD RESET RESET 0 4 8 12 16 20 24 28 EA PC0PC1PC2PC3 0列 1 5 9 13 17 21 25 29 列线 +5v 2 6 10 14 18 22 26 30 3 7 11 15 19 23 26 31 8155 控制寄存器:0100H 8155 A口地址: 0101H 8155 C口地址: 0103H A口为输出 C口为输入口 3列 0行 行线 7行 此图参照P198图6-26画的,但按照书上给的程序,键值标错了。

  9. P.198图的标注 P.198图的正确标注 行线(PA0-PA7) 行线(PA0-PA7) 0行 1行 2行 3行 4行 5行 6行 7行 0行 1行 2行 3行 4行 5行 6行 7行 0 1 2 3 4 5 6 7 0 4 8 12 16 20 24 28 0列 0列 8 9 10 11 12 13 14 15 1 5 9 13 17 21 25 29 列 线 PC 0-3 列 线 PC 0-3 1列 1列 16 17 18 19 20 21 22 23 2 6 10 14 18 22 26 30 2列 2列 24 25 26 27 28 29 30 31 3 7 11 15 19 23 26 31 3列 3列

  10. 列线PC0-3 P.198图的正确标注 0 1 2 3 0行 1行 2行 3行 4行 5行 6行 7行 行线(PA0-PA7) 4 5 6 7 8 9 10 11 行线PA0 | PA7 0行 1行 2行 3行 4行 5行 6行 7行 12 13 14 15 16 17 18 19 0 4 8 12 16 20 24 28 0列 20 21 22 23 1 5 9 13 17 21 25 29 列 线 PC 0-3 1列 24 25 26 27 2 6 10 14 18 22 26 30 28 29 30 31 2列 3 7 11 15 19 23 26 31 3列 0列 1列 2列 3列 左右两图是一样的 习惯说“横行竖列”

  11. 行线(PA0-PA7) 矩阵式键盘名词注释 0行 1行 2行 3行 4行 5行 6行 7行 @ 行号:第0行—第7行→R3 (0,1,2,3,4,5,6,7) @ 行首值:(R3) X 4→ R5 (0,4,8,12,16,20,24,28) @ 列值:C口低4位读进值→R4 (0F,0E,0D,0B,07) 0F:表示此行无键按下。 0E—07:表示此行的0—3列 有键按下。 @ 键值:查得最后结果→ R5 等于已知按键所在的行首值, 再加上所在列的序号。 同一行中,键值等于行首值 连续依次加 1。 0 4 8 12 16 20 24 28 0列 1 5 9 13 17 21 25 29 列 线 PC 0-3 1列 2 6 10 14 18 22 26 30 2列 3 7 11 15 19 23 26 31 3列 矩阵式键盘工作原理: 先由行线送出数据,送全“0”或每次只送一位“0”;然后读进列线,判有无键按下或按键的位置并算出键值。顺序扫描。

  12. KEY1:LCALL KS1;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8;无键闭合则退出 LK1:LCALL DL6ms;消颤12ms LCALL DL6ms LCALL KS1;再查有无键闭合 JNZ LK2;的确有,转处理 LJMP LK8;确实无,退出去 查有无键闭合的子程序KS1: KS1:MOV DPTR,#0101H;指向 A口 MOV A, #00H ;8条行线都送0 MOVX,@DPTR,A;送到行线上去 INC DPTR INC DPTR;指向 C口 MOVX A,@DPTR;读列线的电平 ANL A,#0FH ;保留C口低4位 若确有键按下,则Acc中必有“0” ORL A,#0F0H ;将Acc高4位赋1 CPL A ;Acc取反后,高4位=0; 若有键按下,则低4位中必有“1” RET 检查的结果(出口): 若(A)≠0,则有键按下; 若(A)=0,则无键按下。 行线 0行 1行 2行 3行 4行 5行 6行 7行 0 4 8 12 16 20 24 28 0列 1 5 9 13 17 21 25 29 1列 列线 2 6 10 14 18 22 26 30 2列 3 7 11 15 19 23 26 31 3列

  13. KEY1:LCALL KS1;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8;无键闭合则退出 LK1:LCALL DL6ms;消颤12ms LCALL DL6ms LCALL KS1;再查有无键闭合 JNZ LK2;的确有,转处理 LJMP LK8;确实无,退出去 @ 行号:第0行—第7行→(R3) (0,1,2,3,4,5,6,7) @ 行扫描值: 0FEH →(R2) (FE,FD,FB,F7,EF,DF,BF,7F) FEH = 1111 1110 B(首次扫描) FDH = 1111 1101 B (2次扫描) FBH = 1111 1011 B (3次扫描) F7H = 1111 0111 B (4次扫描) EFH = 1110 1111 B (5次扫描) DFH = 1101 1111 B (6次扫描) BFH = 1011 1111 B (7次扫描) 7FH = 0111 1111 B (8次扫描) @ 列值: (0F,0E,0D,0B,07) 从C口低4位读进 → (R4) 0F:表示此行无键按下。 0E—07:此行的0—3列有键按下。 LK2:MOV R3,#00H;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2 ;取行扫描值 MOVX,@DPTR,A;送到行线上去 INC DPTR INC DPTR;指向8155 C口 MOVX A,@DPTR;读列线的电平 ANL A,#0FH;保留C口低4位 MOV R4,A;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。

  14. MOV A,R2 ;取出此次行扫描值 JNB ACC.7,LK8;若已扫过最后 一行就退出扫描,否则扫下一行。 RL A;Acc中的“0”左移一位 MOV R2,A ;新扫描值仍存进R2 INC R3;行号加1指向下一行 SJMP LK3;转LK3去扫描下一行 KEY1:LCALL KS1;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8;无键闭合则退出 LK1:LCALL DL6ms;消颤12ms LCALL DL6ms LCALL KS1;再查有无键闭合 JNZ LK2;的确有,转处理 LJMP LK8;确实无,退出去 LK2:MOV R3,#00H;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2;取行扫描值 MOVX,@DPTR,A;送到行线上去 INC DPTR INC DPTR;指向8155 C口 MOVX A,@DPTR;读列线的电平 ANL A,#0FH;保留C口低4位 MOV R4,A;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。 @ 行号:第0行—第7行→(R3) (0,1,2,3,4,5,6,7) @ 行扫描值: 0FEH→ (R2) (FE,FD,FB,F7,EF,DF,BF,7F) FEH = 1111 1110 B(首次扫描) …………… BFH = 1011 1111 B (7次扫描) 7FH = 0111 1111B(8次扫描) 注意: 只有第8次扫描值最高位= 0

  15. MOV A,R2 ;取出此次行扫描值 JNB ACC.7,LK8;若已扫过最后 一行就退出扫描,否则扫下一行。 RL A ;Acc中的“0”左移一位 MOV R2,A;新扫描值仍存进R2 INC R3;行号加1指向下一行 SJMP LK3 ;转LK3去扫描下一行 KEY1:LCALL KS1;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8;无键闭合则退出 LK1:LCALL DL6ms;消颤12ms LCALL DL6ms LCALL KS1;再查有无键闭合 JNZ LK2;的确有,转处理 LJMP LK8;确实无,退出去 LK2:MOV R3,#00H;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2;取行扫描值 MOVX,@DPTR,A;送到行线上去 INC DPTR INC DPTR;指向8155 C口 MOVX A,@DPTR;读列线的电平 ANL A,#0FH;保留C口低4位 MOV R4,A;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。 LK4:MOV A, R3;此行有按键,取行号 ADD A, R3 ;行号乘 4 MOV R5, A ;得行首值 ADD A, R5 ;即:0,4,8,12… MOV R5, A ;暂存进R5

  16. MOV A,R2 ;取出此次行扫描值 JNB ACC.7,LK8;若已扫过最后 一行就退出扫描,否则扫下一行。 RL A ;Acc中的“0”左移一位 MOV R2,A;新扫描值仍存进R2 INC R3;行号加1指向下一行 SJMP LK3 ;转LK3去扫描下一行 KEY1:LCALL KS1;查有无键闭合 JNZ LK1 ;有键闭合转消颤 LJMP LK8;无键闭合则退出 LK1:LCALL DL6ms;消颤12ms LCALL DL6ms LCALL KS1;再查有无键闭合 JNZ LK2;的确有,转处理 LJMP LK8;确实无,退出去 LK2:MOV R3,#00H;(R3)←行号初值 MOV R2,#0FEH;(R2)←行扫描初值 LK3:MOV DPTR #0101H;指向8155 A口 MOV A, R2;取行扫描值 MOVX,@DPTR,A;送到行线上去 INC DPTR INC DPTR;指向8155 C口 MOVX A,@DPTR;读列线的电平 ANL A,#0FH;保留C口低4位 MOV R4,A;列值暂存进R4 CJNE A,#0FH,LK4;列值≠全“1” 表明此次送0的行有键按下,转LK4处理, 若=全1,表明此次送0的行无键按下。 LK4:MOV A, R3;此行有按键,取行号 ADD A, R3 ;行号乘 4 MOV R5, A ;得行首值 ADD A, R5 ;即:0,4,8,12… MOV R5, A ;暂存进R5 MOV A, R4;列值只可能= #0F,#0E,#0D,#0B,#07H LK5: RRC A ;取列值的最低位到Cy JNC LK6 ;Cy=0就找到了,即R5 INC R5;否则行值增1,即同 行中的下一个键值 SJMP LK5 ;再转LK5判C键值 LK6: PUSH 05H;将找到的键值压栈 保存起来。

  17. KEY1:LCALL KS1 JNZ LK1 LJMP LK8 LK1:LCALL DL6ms LCALL DL6ms LCALL KS1 JNZ LK2 LJMP LK8 LK2:MOV R3,#00H MOV R2,#0FEH LK3:MOV DPTR #0101H MOV A, R2 MOVX,@DPTR,A INC DPTR INC DPTR MOVX A,@DPTR ANL A,#0FH MOV R4,A CJNE A,#0FH,LK4 LK7:LCALL DL6ms;延6ms LCALL KS1;键释放? JNZ LK7;未释放,等 LCALL DL6ms;消颤 LCALL DL6ms POP ACC ;键值→A RND:RET LK8:MOV A,#0FFH ;无键闭合标志→A RET MOV A,R2 JNB ACC.7,LK8 RL A MOV R2,A INC R3 SJMP LK3 LK4:MOV A, R3 ADD A, R3 MOV R5, A ADD A, R5 MOV R5, A MOV A, R4 LK5: RRC A ;取列值的最低位到Cy JNC LK6 ;Cy=0就找到了,即R5 INC R5;否则行值增1,即同 行中的下一个键值 SJMP LK5 ;再转LK5判C键值 LK6: PUSH 05H;将找到的键值压栈 保存起来。

  18. 矩阵式键盘线反转法(P.202) +5v 原理: @ 由行线输出全“0”,读入 列线,判有无键按下。 @ 若有键按下,再将读入的列 线值由列线输出,读进行线 的值。 @ 第一步读进的列线值与第 二步读进的行线值相加, 从而得到代表此键的唯一 的特征值。 @ 线反转法因输入与输出线 反过来用而得名。 @ 优点是判键速度快,两次 即可。 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 0行 1行 2行 3行 AT89C51 0列 1列 2列 3列 P202图6-28

  19. ①MOV P1,#0F0H ;低位送全“0” MOV A, P1 ;读进P1口电平 ANL A,#0F0H ;保留高4位 CJNE A, #0F0H, MK3(②) ;若有键按下则P1.4—P1.7必 有“0”位,跳转到MK3去处理; 若无键按下则退出键扫描。 矩阵式键盘线反转法图例 +5v P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 0行 1行 2行 设:第3行/第1列结点有键按下 首先: “1111 0000”→ P1 然后读P1: P1←“1101 xxxx” 只留高4位: A= “11010000” 因为有键按下, A≠11110000 3行 AT89C51 0列 1列 2列 3列 P202图6-28

  20. ①MOV P1,#0F0H ;低位送全“0” MOV A, P1 ;读进P1口电平 ANL A,#0F0H ;保留高4位 CJNE A, #0F0H, MK3(②) 矩阵式键盘线反转法图例 +5v ②MOV R2,A ;暂存回R2 ORL A,#0FH ;高4位保留; 低4位充“1” MOV P1, A ;新值返送P1口 MOV A,P1 ;再读进P1口电平 ANL A,#0FH ;只留低4位 ADD A,R2;得到键特征值 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 0行 1行 2行 3行 AT89C51 此时: R2 ← “1101 0000” 然后: A ← “11011111” 返送P1口: “1101 1111” → P1 再读P1口:P1← “xxxx 0111” 只留低4位: A ← “0000 0111” 特征值: A+R2= “1101 0111” 0列 1列 2列 3列 P202图6-28

  21. D/A转换接口扩展

  22. 五、D/A转换器接口 (P.209) D/A转换的一般工作原理: 常用电阻分压/分流来实现D/A转换。 D/A转换器将数字信息转换成与数值成正比的电压/电流。有权电阻解码网络与 T型解码网络两种构建方法,又以T型解码网络最为常用。 权电阻解码网络 简单。但随着D/A转换的位数增加,权电阻值跨度增大,在集成电路中难于实现。 T 型解码网络 电阻数量大一倍。但电阻值归一化程度高,容易集成,精度高。应用最为普遍。

  23. 权电阻解码网络 若: R0 = R R1 = R/2 R2 = R/4 R3 = R/8 ………… R7 = R/128 从而:I0 = Vref/R I1 = 2 Vref/R I2 = 4 Vref/R I3 = 8 Vref/R ………… I7 =128Vref/R 简单, 权电阻值跨度大,在集成电路中难于实现 Vref D7 R7 D6 R6 D5 R5 D4  R4 I D3 Iout + R3 D2 加法器电路 R2 D1 R1 D0 开关控制电路的作用: 将“0”值对应的开关打到地, 将“1”值对应的开关接通Vref R0 开关控制电路

  24. T 型解码网络 电阻数量增大一倍, 但阻值归一,集成容易,精度高 Vref 深度负反馈条件下,运放的“虚短特性”: Vd  0 ,(因开环增益极大,输入端之间压差极小) Ii  0 ,(因输入阻抗极大,输入电流极小) 从而:由节点向下看去阻值均为2R 由节点向下向右看去阻值均为R “1” I7 D7 2R “0” R I6 2R R I5 2R R I4 每个2R支路的电流均为上一支路的1/2: I7 = (Vref/2R) I6 = (Vref/2R)/2 I5 = (Vref/2R)/4 ………… I0 = (Vref/2R)/128 2R R I3  2R R + I2 Iout 2R R I1 加法器电路 2R R I0 D0 开关控制电路 2R 2R 开关控制电路:“0”值将开关打到地;“1”值将开关接通Vref

  25. 8位CMOS数模转换芯片 DAC 0832: DAC0832 √8位D/A,分辨率=Vref/256 √CMOS低功耗器件,+5~+15V 单电源供电 √电流输出型器件(需外接运放) √具有双缓冲控制输出 √采用T型电阻解码网络结构 √参考电压源,-10~+10V CS VCC WR1ILE AGND WR2 D3 XFER D2 D4 D1 D5 D0 D6 Vref D7 RfbIout2 DGND Iout1 20 PIN DIP封装

  26. DAC 0832引脚定义(P.211) D0—D7:8位数字量输入端 /CS: 片选端,低有效 ILE: 数据锁存允许,高有效 /WR1: 写控制信号1,低有效 /WR2: 写控制信号2,低有效 /XFER: 数据传送控制信号 Iout1:电流输出端1 Iout2:电流输出端2 Rfb: 内置反馈电阻端 Vref: 参考电压源,-10~+10V DGND: 数字量地 AGND: 模拟量地 Vcc: +5~+15V单电源供电端 DAC0832 CS VCC WR1ILE AGND WR2 D3 XFER D2 D4 D1 D5 D0 D6 Vref D7 RfbIout2 DGND Iout1 20 PIN DIP封装

  27. DAC0832内部结构框图(P.210) Vref D0—D7:8位数字量输入端 /CS: 片选端,低有效 ILE: 数据锁存允许,高有效 /WR1: 写控制信号1,低有效 /WR2: 写控制信号2,低有效 /XFER:数据传送控制信号 Iout1:电流输出端1 Iout2:电流输出端2 Rfb: 内置反馈电阻端 Vref: 参考电压源,-10~+10V DGND: 数字量地 AGND: 模拟量地 Vcc: +5~+15V单电源供电端 输入寄存器 DAC D/A D7 D0 Iout2 寄存器 转换器 Iout1 Rfb LE2 LE1 1 ILE 1 & LE=1,Q 跟随 D LE=0,Q 锁存 D 0 CE 1 ≥1 WR1 0 0 WR2 1 ≥1 XFER 0 书上P.210图有误 与非门应改为与门

  28. DAC0832 与单片机的连接P.213 89C51单片机 DAC 0832 +5V P0.0—P0.7 DI0—DI7 8位 Vcc Vref P2.0 CS +5V ILE XFER EA Rfb WR WR1 +12V 30Px2 WR2 接示波器  Iout1 uA741 + Iout2 6MHz -12V GND AGND DGND 对应P.213图6-36(C),是两个寄存器同时选通及锁存方式

  29. DAC 0832 常 见 的 几 种 用 法

  30. DAC 0832 常 见 的 几 种 用 法 P.213(a): DAC寄存器直通方式 P.213(b): 输入寄存器直通方式 P.213(c): 两个寄存器同时选通及锁存方式

  31. DAC0832常见的几种用法(P.213) Vref 或非门 输入寄存器 DAC D/A D7 D0 Iout2 寄存器 转换器 Iout1 ≥1 输入任一为“1”输出皆为“0”输入全为“0”,输出才为“1” Rfb LE2 LE1 1 ILE 1 & 非与门 LE=1,Q 跟随 D LE=0,Q 锁存 D 0 CE 1 & ≥1 WR1 0 0 输入全为“0”,输出才为“1”输入任一为“1”输出皆为“0” WR2 1 ≥1 XFER 0 P.213(a): DAC寄存器直通方式 P.213(b): 输入寄存器直通方式 P.213(c): 两个寄存器同时选通及锁存方式

  32. DAC0832 的编程应用举例 P215例1 产生矩形波 P215例2 产生锯齿波 LL:MOV A,#00H ;低电平 MOV DPTR,#0FEFFH MOVX @DPTR,A ;送转换 LCALL DMS1 ;低宽度 MOV A,#0FFH ;高电平 MOVX @DPTR,A ;送转换 LCALL DMS2 ;高宽度 SJMP LL MOV A,#00H ;起始值 MOV DPTR,#0FEFFH MM:MOVX @DPTR,A ;送转换 INC A NOP NOP NOP ;决定坡度 SJMP MM

  33. DAC0832编程应用举例:P216例3产生三角波 MOV A,#00H MOV DPTR,#0FEFFH SS1: MOVX @DPTR,A ;送转换 NOP NOP NOP SS2: INC A ;等速上升 JNZ SS1 SS3: DEC A MOVX @DPTR,A NOP NOP NOP ;等速下降 JNZ SS3 SJMP SS2 三角波 同样的编程思路,若要产生 如下的梯形波也很容易: 梯形波

  34. DAC0832 的编程应用举例(硬件实验十) SE13:MOV SP,#60H MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H MOV 7BH,#02H REPT:MOV R6,#00H JIA1:MOV DPTR,#0FFE0H MOV A,R6 MOVX @DPTR,A;送D/A转换 MOV R0,#79H;显缓最低位 LCALL PTDS ;拆字 MOV R2,#10H XS1:LCALL DIS ;显示 DJNZ R2,XS1 INC R6 ;加1 PTDS—— 单字节拆字子程序: 功能: 将A中的单字节 16进制数拆开: 出口: 低4位放进R0间接寻址指向的单元(79H) 高4位放进R0+1后指向的单元(7AH) 显示缓冲 区初值

  35. DAC0832 的编程应用举例(硬件实验十) CJNE R6,#0FFH,JIA1 ;不到0FF则继续加 JIAN:MOV DPTR,#0FFE0H DEC R6 MOV A,R6 MOVX @DPTR,A ;送转换 MOV R0,#79H LCALL PTDS MOV R2,#10H XS2:LCALL DIS ;显示 DJNZ R2,XS2 CJNE R6,#00H,JIAN ;不为0继续减 SJMP REPT ;循环 SE13:MOV SP,#60H MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H MOV 7BH,#02H REPT:MOV R6,#00H JIA1:MOV DPTR,#0FFE0H MOV A,R6 MOVX @DPTR,A;送D/A转换 MOV R0,#79H;显缓最低位 LCALL PTDS ;拆字 MOV R2,#10H XS1:LCALL DIS ;显示 DJNZ R2,XS1 INC R6 ;加1 显示缓冲 区初值

  36. A/D转换接口扩展

  37. 六、A/D转换器接口 (P.204) A/D转换的一般工作模式常用的有: 逐次逼近式 双积分式 并行式 Σ-Δ式 尤以前两种最为普遍。

  38. 逐次逼近式A/D转换器结构 START CLK EOC 控制逻辑与时序 Vin D0 D7 输出锁存器 + 比较器 SAR - Vst D/A转换器 +Vref -Vref OE

  39. 逐次逼近式A/D转换器工作原理 D/A转换器的输出,从二进制数据的最高位起,依次逐位置1,与待转换的模拟量比较,若前者小于后者,该位置1并保留下来,若前者大于后者,该位 清0;然后再照此 比较下一位,…… 直至比完最低位。 最后得到的结果 即A/D转换的值。 START CLK EOC 控制逻辑与时序 输出锁存器 Vin D0 D7 比较器 SAR Vst D/A转换器 +Vref -Vref OE

  40. 逐次逼近式A/D转换器特点 转换速度较快(比较次数等于A/D的位数)通常在几S至几百S数量级。 被转换的模拟量若频率很高(变化较快)则要加S/H电路。 被转换的模拟量若幅度过小(信号微弱)则需要加信号调理电路。

  41. 双积分式A/D转换器结构与工作原理 电路对未知输入电压先进行固定时间T的积分(充电),然后对已知标准电压进行反向积分(放电),直至放电为0,放电所花时间T(正比于输入电压) Vin +Vin +- +- 积分器 比较器 t -标准电压 控制逻辑 T T 时间固定 斜率固定 时钟 计数器 例如:ICL7107 输出

  42. 双积分式A/D转换器特点 转换速度较慢(因为A/D转换的过程要两次积分)通常在几十mS至几百mS数量级。 适用于转换变化较缓慢的模拟量(频率较低)输入端一般不需要在加S/H电路。 抗干扰性强(信号波动对精度影响不大)。 性价比高,与逐次比较型相比,同样价格条件下转换精度较高,常用于数字多用表。

  43. 8位CMOS模数转换芯片ADC 0809 P.205 √8位A/D,量化间隔=Vin/(256-1) √CMOS低功耗器件 √8 通道多路开关输入切换电路 √单电源+5,Vref=+5V Vin范围:单极性0—+5V √逐次逼近结构 √每次转换时间:100S 60个时钟周期, fmax=640KHz (推荐CLK=500KHz) √转换结果读取方式: ①延时读数 ②查询EOC=1 ③EOC申请中断 IN3 IN2 IN4 IN1 IN5 IN0 ADC0809 IN6 ADDA IN7 ADDB START ADDC EOC ALE D3 D7 OE D6 CLK D5 VCC D4 Vref+ D0 GND Vref- D1 D2

  44. IN0—IN7:8通道模拟量输入端 D0—D7: 8位数字量输出端 ADDC、ADDB、ADDA: 接地址锁存器的低三位地址 ALE: 地址锁存允许控制信号 START:清0内寄存器,启动转换 OE: 允许读A/D结果,高有效 CLK:时钟输入端,应≤640KHz EOC:转换结束时为高 Vcc:+5V Vref+:参考电压,+5V Vref-:0V ADC 0809引脚定义: IN3 IN2 IN4 IN1 IN5 IN0 ADC0809 IN6 ADDA IN7 ADDB START ADDC EOC ALE D3 D7 OE D6 CLK D5 VCC D4 Vref+ D0 GND Vref- D1 D2

  45. ADC0809 结构框图(参见P.205) START CLK EOC IN0 控制逻辑与时序 8 通道多路开关 D0 D7 Vin 输出锁存器 + IN7 比较器 SAR - Vst ADDA 地址译码锁存 D/A转换器 ADDB ADDC ALE +Vref -Vref OE

  46. ADC0809 与单片机的连接P.207 锁存器74LS373 89C51单片机 ADC 0809 口地址可以为:0FE00~0FE07H 也可为: 0FEF0~ 0FEF7H D0-D7 ADDA P0.0-P0.7 8D Q0 Q1 ADDB ALE G +5V Q2 ADDC EA 2 OE 30Px2 CLK WR START ≥1 ALE P2.0 6MHz EOC ≥1 OE INT1 RD CK Q 图中的2 分频电路可用D触发器实现 D /Q

  47. ADC0809八路巡回中断式数据采集P.209 ORG 0000H AJMP MAIN ORG 0013H;外部中断1的中断矢量 AJMP INT MAIN: MOV R0,#0A0H ;存结果的缓冲区:A0H-A7H MOV R2,#08H ;待采集的通道数为 8 SETB IT1 ;选择下降沿触发中断 SETB EA ;开中断 SETB EX1 MOV DPTR,#0FEF0H ;通道0的地址 MOVX @DPTR, A ;启动转换。注意:A=? HERE:SJMP HERE ;等待中断

  48. ADC0809八路巡回中断式数据采集P.209 ORG 0000H AJMP MAIN ORG 0013H AJMP INT MAIN: MOV R0,#0A0H MOV R2,#08H SETB IT1 SETB EA SETB EX1 MOV DPTR,#0FEF0H MOVX @DPTR, A HERE:SJMP HERE INT:MOVX A,@DPTR ;读数据 MOV @R0, A ;数据放进缓存单元 INC R0 ;指向下一缓存 INC DPTR ;指向下一通道 DJNZ R2,RTN ; 8 次未完就继续采集, ;已完就关中断、停采集 CLR EA CLR EX1 RETI RTN:MOVX @DPTR,A;启动采集 RETI

  49. SE11:MOV SP, #60H ;设SP堆栈从61H开始 MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#00H 显示缓冲区79H—7EH MOV 7BH,#09H 赋初值“0809黑黑” MOV 7AH,#10H MOV 79H,#10H 编程应用例子:硬件实验九

  50. SE11: MOV SP, #60H (显缓79H~7EH赋初值“0809黑黑”——略) ADC:LCALL DIS;通过调显示也延时>100uS MOV A,#00H ;累加器里任意赋一个值 MOV DPTR,#0FFE0H ;0809通道0口地址 MOVX @DPTR,A ;启动0809的0通道采样 LCALL DIS;显示 & 延时 MOVX A,@DPTR ;取出采样值 MOV R0,#79H ;R0指向显示缓冲区首址 LCALL PTDS ;采样值拆开并送显缓 SJMP ADC ;连续转换 编程应用例子:硬件实验九

More Related