51
第第第第第第第第第2 本本本本本本本本 本本本本 , 本本本本本本本本本 本本本本本本本 本本本本本本 、) ; D/A 本本本本DAC0832 本本本本本本; A/D 本本本本ADC0809 本本本本本本 , 本本 本本本本本本本本本本本本本本.

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

  • Upload
    goro

  • View
    115

  • Download
    6

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

扩展键盘接口

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

四、键盘接口 P.194键盘 单片机系统中完成控制参数输入及修改的基本输入设备,是人工干预系统的重要手段。

单片机与计算机在键盘规模 /键符设置等方面差别很大。键盘分类@ 按键值编码方式分 ( 硬件 )编码键盘与非 (硬件 )编码键盘。@ 按键组连接方式分 独立连接键盘与矩阵连接键盘。

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

编码键盘 : 采用专用的编码 /译码器件 ,被按下的键由该器件译码输出相应的键码 /键值。特点:增加了硬件开销,编码因选用器件而异,编码固定,但编程简单。适用于规模大的键盘。

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

按键值编码方式 : 编码键盘与非编码键盘

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

按键组连接方式 : 独立连接键盘与矩阵连接键盘独立连接键盘 : 每键相互独立,各自与一条 I/O 线相连, CPU 可直接读取该 I/O 线的高 /低电平状态。特点:占 I/O 口线多,但判键速度快,多用于设置控制键、功能键。适用于键数少的场合。

矩阵连接键盘 : 键按矩阵排列 ,各键处于矩阵行 /列的结点处 ,CPU 通过对连在行 (列 )的 I/O 线送已知电平的信号 ,然后读取列 (行 )线的状态信息。逐线扫描 ,得出键码。特点:键多时占用 I/O 口线少 ,但判键速度慢 ,多用于设置数字键。适用于键数多的场合。

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

独立连接式键盘例 1:

特点:此子程序需不断 (或定时 )调用,否则可能漏判。 4个键的优先级由指令顺序决定。

P1.0P1.1P1.2P1.3

KEY: JNB P1.0,FUNC1 ; 逐键判别 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.3,FUNC4 RET ; 无任何键按下由此返回FUNC1: …… ;做 P1.0 要求的“功能1” RETFUNC2: …… ; 做 P1.1 要求的“功能2” RETFUNC3: …… ; 做 P1.2 要求的“功能3” RETFUNC4: …… ; 做 P1.3 要求的“功能4” RET

AT89C51

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

独立连接式键盘例 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” RETIFUNC2: …… ; 做 P1.1 要求的“功能2” RETIFUNC3: …… ; 做 P1.2 要求的“功能3” RETIFUNC4: …… ; 做 P1.3 要求的“功能4” RETI

INT0

&

( 上拉 )

AT89C51

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

矩阵式键盘 P.198 例

AT89C51

8155P

0ALE CE

RESET

AD0-7

EA

RESET

RD

WR

WRRD

PA7PA6PA5PA4PA3PA2PA1PA0

PC0PC1PC2PC3

P2.7ALE

+5v

+5v

行线

列线

0行

7行

0列

3列

0 4 8 12 16 20 24 28

1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30

3 7 11 15 19 23 26 31

此图参照 P198图 6-26 画的 ,但按照书上给的程序 ,键值标错了。

P2.0 IO/M

8155 控制寄存器: 0100H 8155 A 口地址: 0101H 8155 C 口地址: 0103H A 口为输出 C 口为输入口

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

P.198图的标注

0 行 1 行 2 行 3 行 4 行 5 行 6 行 7行

行线 (PA0 - PA7)

列 线 PC 0-3

0列

3列

0 4 8 12 16 20 24 28

1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30

3 7 11 15 19 23 26 31

1列2列

0 行 1 行 2 行 3 行 4 行 5 行 6 行 7行

行线 (PA0 - PA7)

列 线 PC 0-3

0列

3列

0 1 2 3 4 5 6 7

8 9 10 11 12 13 14 1516 17 18 19 20 21 22 23

24 25 26 27 28 29 30 31

1列2列

P.198图的正确标注

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

0 行 1 行 2 行 3 行 4 行 5 行 6 行 7行

行线 (PA0 - PA7)

列 线 PC 0-3

0列

3列

0 4 8 12 16 20 24 28

1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30

3 7 11 15 19 23 26 31

1列2列

P.198图的正确标注0 行

1 行

2 行

3 行

4 行

5 行

6 行

7 行

0 列

1 列

2 列

3 列

0 1 2 34 5 6 78 9 10 11

12 13 14 1516 17 18 1920 21 22 2324 25 26 2728 29 30 31

列线 PC0-3

行线PA0 | PA7

左右两图是一样的

习惯说“横行竖列”

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

矩阵式键盘名词注释0 行 1 行 2 行 3 行 4 行 5 行 6 行 7行

行线 (PA0 - PA7)

列 线 PC 0-3

0列

3列

0 4 8 12 16 20 24 28

1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30

3 7 11 15 19 23 26 31

矩阵式键盘工作原理: 先由行线送出数据 , 送全“ 0”或每次只送一位“ 0”;然后读进列线,判有无键按下或按键的位置并算出键值。顺序扫描。

1列2列

@ 行号:第 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。

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

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列

3列

1列2列

0 行 1 行 2 行 3 行 4 行 5 行 6 行 7行

0 4 8 12 16 20 24 28

1 5 9 13 17 21 25 29

2 6 10 14 18 22 26 30 3 7 11 15 19 23 26 31

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

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(首次扫描 ) 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 列有键按下。

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

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 的行无键按下。

MOV A , R2 ; 取出此次行扫描值 JNB ACC.7,LK8 ; 若已扫过最后 一行就退出扫描 , 否则扫下一行。 RL A ;Acc 中的“ 0” 左移一位 MOV R2,A ; 新扫描值仍存进 R2 INC R3 ; 行号加 1 指向下一行 SJMP LK3 ; 转 LK3 去扫描下一行

@ 行号:第 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 1111 B (8 次扫

描 )注意: 只有第 8 次扫描值最高位 = 0

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

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 的行无键按下。

MOV A , R2 ; 取出此次行扫描值 JNB ACC.7,LK8 ; 若已扫过最后 一行就退出扫描 , 否则扫下一行。 RL A ;Acc 中的“ 0” 左移一位 MOV R2,A ; 新扫描值仍存进 R2 INC R3 ; 行号加 1 指向下一行 SJMP LK3 ; 转 LK3 去扫描下一行

LK4 : MOV A, R3; 此行有按键 , 取行号 ADD A, R3 ; 行号乘 4 MOV R5, A ; 得行首值 ADD A, R5 ; 即 :0,4,8,12… MOV R5, A ; 暂存进 R5

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

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 的行无键按下。

MOV A , R2 ; 取出此次行扫描值 JNB ACC.7,LK8 ; 若已扫过最后 一行就退出扫描 , 否则扫下一行。 RL A ;Acc 中的“ 0” 左移一位 MOV R2,A ; 新扫描值仍存进 R2 INC R3 ; 行号加 1 指向下一行 SJMP LK3 ; 转 LK3 去扫描下一行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,#07HLK5: RRC A ; 取列值的最低位到 Cy JNC LK6 ;Cy=0 就找到了 , 即 R5

INC R5 ; 否则行值增 1, 即同 行中的下一个键值

SJMP LK5 ; 再转 LK5 判 C 键值LK6: PUSH 05H ; 将找到的键值压栈

保存起来。

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

KEY1:LCALL KS1 JNZ LK1 LJMP LK8 LK1 : LCALL DL6ms LCALL DL6ms LCALL KS1 JNZ LK2 LJMP LK8 LK2 : MOV R3,#00H MOV R2,#0FEHLK3 : 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

MOV A , R2 JNB ACC.7,LK8 RL A MOV R2,A INC R3 SJMP LK3LK4 : 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 ; 将找到的键值压栈 保存起来。

LK7 : LCALL DL6ms; 延 6ms LCALL KS1; 键释放? JNZ LK7; 未释放 , 等 LCALL DL6ms ; 消颤 LCALL DL6ms POP ACC ; 键值→ ARND : RET

LK8 : MOV A , #0FFH ; 无键闭合标志→ A RET

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

矩阵式键盘线反转法 (P.202)

AT89C51

P1.0 P1.1 P1.2 P1.3

P1.4 P1.5 P1.6 P1.7

+5v

P202图 6-28

0 行

1 行

2 行3 行

0 列

1 列

2 列

3 列

原理:@ 由行线输出全“ 0”,读入 列线,判有无键按下。@ 若有键按下 ,再将读入的列 线值由列线输出 ,读进行线 的值。@ 第一步读进的列线值与第 二步读进的行线值相加, 从而得到代表此键的唯一 的特征值。@ 线反转法因输入与输出线 反过来用而得名。@ 优点是判键速度快,两次 即可。

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

矩阵式键盘线反转法图例

AT89C51

P1.0 P1.1 P1.2 P1.3

P1.4 P1.5 P1.6 P1.7

+5v

①MOV P1 , #0F0H ; 低位送全“ 0” MOV A , P1 ; 读进 P1 口电平 ANL A , #0F0H ; 保留高 4 位 CJNE A, #0F0H, MK3(②) ; 若有键按下则 P1.4—P1.7 必 有“ 0” 位 , 跳转到 MK3 去处理 ; 若无键按下则退出键扫描。

0 行

1 行

2 行3 行

0 列

1 列

2 列

3 列

设 : 第 3 行 / 第 1 列结点有键按下

首先 : “1111 0000” → P1然后读 P1: P1← “1101 xxxx” 只留高 4 位 : A = “ 1101 0000”因为有键按下 , A ≠11110000

P202图 6-28

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

AT89C51

P1.0 P1.1 P1.2 P1.3

P1.4 P1.5 P1.6 P1.7

+5v

①MOV P1 , #0F0H ; 低位送全“ 0” MOV A , P1 ; 读进 P1 口电平 ANL A , #0F0H ; 保留高 4 位 CJNE A, #0F0H, MK3(②)

0 行

1 行

2 行3 行

0 列

1 列

2 列

3 列

此时: R2 ← “1101 0000”然后: A ← “1101 1111”返送 P1 口 : “1101 1111” → P1再读 P1 口: P1← “xxxx 0111” 只留低 4 位 : A ← “0000 0111”特征值 : A+R2= “1101 0111”

②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 ; 得到键特征值

P202图 6-28

矩阵式键盘线反转法图例

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

D/A 转换接口扩展

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

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

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

权电阻解码网络

+I

Iout

R0

R1

R2

R3

R4

R5

R6

R7

若: 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

开关控制电路

开关控制电路的作用:将“ 0”值对应的开关打到地,将“ 1”值对应的开关接通 Vref

加法器电路

简单 , 权电阻值跨度大,在集成电路中难于实现

D7

D6

D5

D4

D3

D2

D1

D0

Vref

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

+ Iout

2R

2R

2R

2R

2R

2R

2R

2R

每个 2R支路的电流均为上一支路的 1/2 : I7 = (Vref/2R) I6 = (Vref/2R)/2 I5 = (Vref/2R)/4 ………… I0 = (Vref/2R)/128

开关控制电路

开关控制电路 :“0”值将开关打到地;“ 1”值将开关接通 Vref

加法器电路

T 型解码网络

2R

R

R

R

R

R

R

R

深度负反馈条件下 ,运放的“虚短特性” :Vd 0 ,( 因开环增益极大 ,输入端之间压差极小 )Ii 0 ,( 因输入阻抗极大 ,输入电流极小 )从而 : 由节点向下看去阻值均为 2R 由节点向下向右看去阻值均为 R

Vref“1”

“0”

I7

I6

I5

I4

I3

I2

I0

I1

电阻数量增大一倍 , 但阻值归一,集成容易,精度高

D7

D0

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

8 位 CMOS 数模转换芯片 DAC 0832:

CS VCCWR1 ILE

AGND WR2D3 XFERD2 D4D1 D5

D0 D6Vref D7Rfb Iout2

DGND Iout1

DAC0832

20 PIN DIP 封装

√8位 D/A ,分辨率 =Vref/256√CMOS低功耗器件, +5 ~ +15V 单电源供电√电流输出型器件 (需外接运放 )√具有双缓冲控制输出√采用 T型电阻解码网络结构√参考电压源, -10~ +10V

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

DAC 0832 引脚定义 ( P.211 )

CS VCCWR1 ILE

AGND WR2D3 XFERD2 D4D1 D5

D0 D6Vref D7Rfb Iout2

DGND Iout1

DAC0832

20 PIN DIP 封装

D0—D7: 8位数字量输入端/CS: 片选端,低有效ILE : 数据锁存允许 , 高有效/WR1 : 写控制信号 1,低有效/WR2 : 写控制信号 2,低有效/XFER : 数据传送控制信号Iout1 : 电流输出端 1Iout2 : 电流输出端 2Rfb: 内置反馈电阻端Vref: 参考电压源 ,-10~+10VDGND : 数字量地AGND : 模拟量地Vcc: +5 ~ +15V单电源供电端

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

DAC0832 内部结构框图 ( P.210 )

书上 P.210图有误

与非门应改为与门

&

≥1

≥1

1

10

00

0

1

1

LE2IL

E

CE

WR1WR2XFER

D7

D0 LE

1

输入寄存器

寄存器

DAC 转

换器

D/A

VrefIout2Iout1

Rfb

LE=1 , Q 跟随 D

LE=0 , Q 锁存 D

D0—D7: 8位数字量输入端/CS: 片选端,低有效ILE : 数据锁存允许 , 高有效/WR1 : 写控制信号 1,低有效/WR2 : 写控制信号 2,低有效/XFER :数据传送控制信号Iout1 :电流输出端 1Iout2 :电流输出端 2Rfb: 内置反馈电阻端Vref: 参考电压源 ,-10~ +10VDGND : 数字量地AGND : 模拟量地Vcc: +5 ~ +15V单电源供电端

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

DAC0832 与单片机的连接 P.21389C51 单片机

DAC 0832

P0.0—P0.7

P2.0

8位

DI0—DI7

EA WRXFERCS

+5V

6MHz

30Px2

对应 P.213图 6-36(C), 是两个寄存器同时选通及锁存方式

WR1WR2

+5V

VccVrefILE

+uA741

-12V

+12V

GND AGNDDGND

Iout1Iout2

Rfb

接示波器

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

DAC 0832 常 见 的 几 种 用 法

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

DAC 0832 常 见 的 几 种 用 法

P.213(a): DAC寄存器直通方式 P.213(b): 输入寄存器直通方式 P.213(c): 两个寄存器同时选通及锁存方式

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

DAC0832 常见的几种用法 ( P.213 )

&

≥1

≥1

1

10

00

0

1

1

LE2IL

E

CE

WR1WR2XFER

D7

D0 LE

1

输入寄存器

寄存器

DAC 转

换器

D/A

VrefIout2Iout1

Rfb

LE=1 , Q 跟随 D

LE=0 , Q 锁存 D

P.213(a): DAC寄存器直通方式 P.213(b): 输入寄存器直通方式 P.213(c): 两个寄存器同时选通及锁存方式

≥1

&

或非门

非与门

输入任一为“ 1” 输出皆为“ 0” 输入全为“ 0” ,输出才为“ 1”

输入全为“ 0” ,输出才为“ 1” 输入任一为“ 1”输出皆为“ 0”

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

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,#0FEFFHMM : MOVX @DPTR,A ;送转换 INC A NOP NOP NOP ; 决定坡度 SJMP MM

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

DAC0832 编程应用举例: P216例 3产生三角波 MOV A , #00H MOV DPTR,#0FEFFHSS1: MOVX @DPTR,A ; 送转换 NOP NOP NOPSS2: INC A ; 等速上升 JNZ SS1SS3: DEC A MOVX @DPTR , A NOP NOP NOP ; 等速下降 JNZ SS3 SJMP SS2

同样的编程思路,若要产生如下的梯形波也很容易:

三角波

梯形波

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

DAC0832 的编程应用举例(硬件实验十)SE13:MOV SP,#60H

MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H MOV 7BH,#02HREPT:MOV R6,#00HJIA1: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)

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

DAC0832 的编程应用举例(硬件实验十)SE13:MOV SP,#60H

MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H MOV 7BH,#02HREPT:MOV R6,#00HJIA1: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

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 ; 循环

显示缓冲 区初值

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

A/D 转换接口扩展

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

六、 A/D 转换器接口 ( P.204 )

A/D 转换的一般工作模式常用的有: 逐次逼近式 双积分式 并行式 Σ-Δ式尤以前两种最为普遍。

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

控制逻辑与时序

D/A 转换器

SAR

Vin

比较器输出锁存器

START CLK

EOC

D0

D7

+Vref -Vref OE

Vst

逐次逼近式 A/D 转换器结构

+

-

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

D/A 转换器的输出 ,从二进制数据的最高位起,依次逐位置 1,与待转换的模拟量比较 ,若前者小于后者,该位置 1并保留下来,若前者大于后者,该位清 0; 然后再照此比较下一位 ,……直至比完最低位。最后得到的结果即 A/D 转换的值。

控制逻辑与时序

D/A 转换器

SAR

Vin

比较器输出锁存器

START CLK

EOC

D0

D7

+Vref -Vref OE

Vst

逐次逼近式 A/D 转换器工作原理

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

转换速度较快(比较次数等于 A/D 的位数)通常在几 S 至几百 S数量级。

被转换的模拟量若频率很高(变化较快)则要加 S/H电路。

被转换的模拟量若幅度过小(信号微弱)则需要加信号调理电路。

逐次逼近式 A/D 转换器特点

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

双积分式 A/D 转换器结构与工作原理

比较器积分器

+- +

-

-标准电压

时钟

控制逻辑

计数器

+ Vin

T T时间固定 斜率固定

Vin

t

输出

电路对未知输入电压先进行固定时间 T的积分(充电 ),然后对已知标准电压进行反向积分 (放电 ),直至放电为 0,放电所花时间 T(正比于输入电压 )

例如: ICL7107

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

双积分式 A/D 转换器特点

转换速度较慢(因为 A/D 转换的过程要两次积分)通常在几十 mS至几百 mS数量级。

适用于转换变化较缓慢的模拟量(频率较低)输入端一般不需要在加 S/H电路。

抗干扰性强(信号波动对精度影响不大)。

性价比高,与逐次比较型相比,同样价格条件下转换精度较高,常用于数字多用表。

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

IN3 IN2IN4 IN1IN5 IN0IN6 ADDAIN7 ADDB

START ADDC EOC ALED3 D7OE D6

CLK D5VCC D4Vref+ D0GND Vref-

D1 D2

ADC0809

8 位 CMOS 模数转换芯片 ADC 0809 P.205 √8位 A/D,量化间隔 =Vin/(256-1)√CMOS低功耗器件√8 通道多路开关输入切换电路√单电源 +5,Vref=+5V Vin 范围 : 单极性 0—+5V√逐次逼近结构√每次转换时间: 100S 60 个时钟周期 , fmax=640KHz (推荐 CLK=500KHz)√转换结果读取方式: ①延时读数 ②查询 EOC=1 ③EOC申请中断

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

IN3 IN2IN4 IN1IN5 IN0IN6 ADDAIN7 ADDB

START ADDC EOC ALED3 D7OE D6

CLK D5VCC D4Vref+ D0GND Vref-

D1 D2

ADC0809

IN0—IN7: 8通道模拟量输入端 D0—D7: 8位数字量输出端ADDC 、 ADDB 、 ADDA : 接地址锁存器的低三位地址ALE : 地址锁存允许控制信号START :清 0内寄存器 ,启动转换OE: 允许读 A/D 结果 , 高有效CLK :时钟输入端 , 应≤ 640KHzEOC :转换结束时为高Vcc: +5VVref+:参考电压, +5VVref-: 0V

ADC 0809引脚定义 :

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

ADC0809 结构框图 (参见 P.205)

8 通道多路开关

IN0

IN7

地址译码锁存

ADDAADDBADDC

ALE

控制逻辑与时序

D/A 转换器

SAR

Vin

比较器输出锁存器

START CLK

EOC

D0

D7

+Vref -Vref OE

Vst

+

-

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

ADC0809 与单片机的连接 P.207

89C51 单片机

ADC 0809

锁存器 74LS373

P0.0-P0.7

ALE

P2.0

8D Q0

ALE

CLK

ADDA

D0-D7

G

EAOE

START

RD

WR

OE

Q1Q2

ADDBADDC+5V

INT1EOC≥1

≥1

6MHz

30Px2

2

CK QD /Q

图中的 2 分频电路可用 D触发器实现

口地址可以为:0FE00~0FE07H 也可为: 0FEF0~ 0FEF7H

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

ORG 0000H AJMP MAIN ORG 0013H ;外部中断 1的中断矢量 AJMP INTMAIN: 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 ; 等待中断

ADC0809八路巡回中断式数据采集 P.209

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

ORG 0000H AJMP MAIN ORG 0013H AJMP INTMAIN: MOV R0,#0A0H MOV R2,#08H SETB IT1 SETB EA SETB EX1 MOV DPTR,#0FEF0H MOVX @DPTR, AHERE : SJMP HERE

INT:MOVX A , @DPTR ; 读数据 MOV @R0, A ; 数据放进缓存单元 INC R0 ; 指向下一缓存 INC DPTR ; 指向下一通道 DJNZ R2 , RTN ; 8 次未完就继续采集 , ; 已完就关中断、停采集 CLR EA CLR EX1 RETIRTN:MOVX @DPTR,A;启动采集 RETI

ADC0809八路巡回中断式数据采集 P.209

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

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

编程应用例子:硬件实验九

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

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 ; 连续转换

编程应用例子:硬件实验九

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

OVER !