ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:328.27KB ,
资源ID:10177863      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10177863.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(接口与通信.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

接口与通信.docx

1、接口与通信目 录1.8259外部中断控制11 1.1 课程设计要求11.2 课程设计目的11.3 实验电路11.4 程序框图11.5 程序代码21.6 心得体会42.计时器的模拟实现42 2.1 课程设计要求42.2 课程设计目的42.3 电路原理图42.4 程序框图52.5 代码设计及接线分析.52.6 程序代码52.7 心得体会.103.温度采集及模拟控制.101 2 3 3.1 课程设计要求.103.2 课程设计目的.113.3 程序框图.113.4 题目分析.113.5 程序代码.123.6 心得体会.17B.1 8259外部中断控制 (参考Lab8000.pdf中的 :硬件实验35)

2、1、课程设计要求用8088/86 控制8259 可编程中断控制器,实现对外部中断的响应和处理。要求程序中对每次中断进行计数,并将计数结果用8255 的PA 口输出到LED。2、课程设计目的 (1) 8088/86 与8259 的连接方法 (2) 学习8088/86 对8259 的控制方法3、实验电路: 4、程序框图:5、代码如下:mode equ 82h ; 8255 工作方式 PA,PC输出,PB输入PA8255 equ 8000h ; 8255 PA口输出地址CTL8255 equ 8003h ; 控制口端口ICW1 equ 00010011b ; 单片8259, 边缘触发,上升沿中断,

3、单片,要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式,非特殊全嵌套,非缓冲方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 09000h ; 8259偶地址CS8259B equ 09001h ; 8259奇地址data segmentCNT db 0data endscode segment assume cs:code, ds: dataIEnter proc near ; 中断子程序 push ax push dx mov dx, PA8255 inc CNT

4、 ; 计数值加1 mov al, CNT out dx, al ; 在8255的PA口输出计数值 mov dx, CS8259A mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iret ; 中断返回,恢复断点IEnter endpIInit proc ; 8259初始化子程序 mov dx, CS8259A ; 设置初始化命令ICW1,写入偶地址端口 mov al, ICW1 out dx, al mov dx, CS8259B ; 设置初始化命令ICW2,写入奇地址端口 mov al, ICW2 out dx, al mov al, IC

5、W4 ; 设置初始化命令ICW4,写入奇地址端口 out dx, al mov al, OCW1 ; 设置操作命令OCW1,写入奇地址端口 out dx, al ret ; 返回IInit endpstart proc near ; 主程序 mov dx, CTL8255 mov al, mode out dx, al ; 在8255的控制口端口写入控制方式字 cli ; 中断标志IF置0,禁止中断 mov ax, 0 mov ds, ax mov bx, 4*ICW2 ; 中断号 mov ax, code shl ax, 4 ; x 16 add ax, offset IEnter ; 中断

6、入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 代码段地址为0 call IInit ; 调用子程序对8259进行初始化设置 mov ax, data mov ds, ax mov CNT, 0 ; 计数值初始为0 mov al, CNT mov dx, PA8255 out dx, al sti ; 中断标志IF置1,允许中断LP: ; 等待中断,并计数。 nop jmp LPstart endpcode ends end start6、心得体会:这个实验比较简单,也不是第一次做了,通过书本及实验,对8259也的原理也相

7、对了解,知道如何运用了,根据程序框图,代码很容易就明白了。做起来还是很简单的。B.2 计时器的模拟实现(参考Lab8000.pdf中的 :硬件实验18)1、课程设计要求利用电子时钟的原理,设计实现一个计时器(倒计时),时间精度是0.1秒,即每计数10次就等于1秒在最右边的数码管上显示0.1秒的计数值,在最左边的数码管上显示1秒的计数值,从9秒开始计数,到0.0秒就结束程序通过总线方式控制八段LED数码管控制计数值的显示(使用总线方式驱动LED不需要8255的参与)2、课程设计目的 (1)熟练掌握定时器8253/8254的定时计数功能 (2)熟练掌握8259A外部中断及中断服务程序的设计 (3)

8、熟练掌握总线方式驱动八段LED数码管 (4)熟练掌握汇编子程序的编写方法 (5)熟练掌握八段LED数码管的控制方式3、电路原理图4、程序框图5、代码设计及接线分析:由于题目要求该计时器的精度为0.1,而我选择接入的时钟脉冲为1MHz,它是精度为10-6,所要要将其扩大105倍,而一个计数器计数的最大次数为216=65535CS(0C000H)8259_CS-CS(0D000H)KEY/LED_CS-CS(8000H)GATE0、GATE1-VCCCLK0-1MHzOUT0-CLK1、OUT1-INT05、代码如下:CONTROL equ 0c003h ; 计数器的控制端口COUNT0 equ

9、0c000h ; 计数器0的入口地址COUNT1 equ 0c001h ; 计数器1的入口地址COUNT2 equ 0c002h ; 计数器2的入口地址OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS8259B equ 0d

10、001hdata segmentLEDBuf db 2 dup(?) ; 显示缓冲DelayT db 1 dup(?)left db 0 ; 左边的值right db 0 ; 右边的值LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hdata endscode segment assume cs:code, ds: dataDelay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax lo

11、op $ pop cx pop ax retDelay endpDisplayLED proc near mov bx, offset LEDBuf mov cl, 2 ; 共2个八段管 ;cl的值由6改成2 mov ah, 00100000b ; 从左边开始显示 ;把原本的00100000改成00000010DLoop: mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, OUTSEG out dx,al mov dx, OUTBIT mov al, ah out dx, al ; 显示一位八段管 push ax mo

12、v ah, 1 ; 用来觉得延时程序调用的次数 call Delay pop ax shr ah, 5 ; 因为要实现一个在最右端,一个在最左端,所以右移5位 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 retDisplayLED endpIEnter proc near push ax push dx dec right mov al, right cmp al, 0ffh ;由于是从9.0开始倒数,0自减1后变为0ffh,所以要与0ffh比较 jne Exit mov right, 9 dec le

13、ft mov al, left cmp al, 0ffh jne Exit mov left, 9Exit: mov dx, CS8259A mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretIEnter endpIInit proc mov dx, CS8259A mov al, ICW1 out dx, al mov dx, CS8259B mov al, ICW2 out dx, al mov al, ICW4 out dx, al mov al, OCW1 out dx, al retIInit endpstart proc n

14、ear mov ax, data mov ds, ax mov left, 9 mov right, 0 cli mov ax, 0 mov ds, ax mov al, 36h; 00110110B ; 计数器0,16位,方式3,二进制 mov dx, CONTROL out dx, al mov ax, 1000 mov dx, COUNT0 out dx, al ; 计数器低字节 mov al, ah out dx, al ; 计数器高字节 mov al, 76h; 01110110B ; 计数器1,16位,方式3,二进制 mov dx, CONTROL out dx, al mov a

15、x, 100 mov dx, COUNT1 out dx, al ; 计数器低字节 mov al, ah out dx, al ; 计数器高字节 mov bx, 4*ICW2 ; 中断号 mov ax, code shl ax, 4 ; x 16 add ax, offset IEnter ; 中断入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 代码段地址为0 call IInit mov ax, data mov ds, ax stiLP: ; 等待中断 mov al, left mov ah, 0 mov bx, of

16、fset LEDMAP add bx, ax mov al, bx or al, 80h ; 使小数点能显示出来 mov LEDBuf, al mov al, right mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+1, al call DisplayLED mov al,left ;用于判断是否倒数到0,先判断左边的一位 cmp al,0 ;若左边为0,则再判断右边 jnz LP ;当两位数都为零,则关中断 mov al,right ;不必继续循环倒数 cmp al,0 jnz LP cli jmp LPs

17、tart endpcode ends end start心得体会:这个题目相对于第一个来说,难度有所提高,设计代码时主要是精度为0.1的设计会比较困难,要用到两级计数器级联;另外就是中断的判断是0ffh而不是0这里一不留神就很容易出错;接着就是设置什么时候停止倒数。解决以上问题,整份代码就基本出来了。完成得还不错。B.3温度采集及模拟控制(参考Lab8000.pdf中的 :硬件实验14、23、26)1、课程设计要求利用实验板上的ADC0809 做A/D 转换器,实验板上的电位器提供模拟温度输入,编制程序,将模拟量转换成二进制数字量,采用中断方式下,A/D 转换结束后会自动产生EOC 信号,将其

18、与CPU 的外部中断相接, 编程用中断方式读回A/D 结果。同时,通过8255A控制八段LED数码管控制计数值的显示温度注意:1) 参考电压 2) 将电位器的最大值和最小值对应的模拟量测量出来2、课程设计目的 (1)熟练掌握ADC 0809的功能 (2)熟练掌握8259A外部中断及中断服务程序的设计 (3)熟练掌握8255A方式驱动八段LED数码管 (4)熟练掌握汇编子程序的编写方法 (5)熟练掌握八段LED数码管的控制方式 3、程序框图4、题目分析 该题目主要是通过电位器产生模拟温度输出,用0809进行转换,并自动产生EOC信号,与8259相接;8259收到信号后,产生中断,通过8255的P

19、A、PB端口作为段和位,输出当前温度。主要设计:因为电位器输出不是很稳定,则采用平均采样,每次输出当前温度,先进行16次采样,求出平均值,再输出;为了使显示的温度停留时间加长,采用循环显示1次;由于每次采集温度,都需要启动0809,则在主程序中加了0809的循环启动;因为温度的取值范围为:028-1,则,设置显示结果的时候用3个数码管显示,还要对没一位值对应输出等。5、代码如下:MD8255 equ 080h ; 方式0,PA,PC输出,PB输入PA8255 equ 8000h ; Port APB8255 equ 8001h ; Port BCTL8255 equ 8003h ; 8255控

20、制端口AS0809 equ 0c000h ; AD采样输入片选ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式OCW1 equ 11111110b ; 只响应INT0 中断CS8259A equ 0d000h ; 8259地址CS8259B equ 0d001hLowTemp equ 0 ; A/D 0HighTemp equ 255 ; A/D 255data segmentLEDBuf db 3 dup(?) ; 显示缓冲Delay

21、T db 1 dup(?)CurTemp db 1 dup(?) ; 当前的温度LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hdata endscode segment assume cs:code, ds: dataDelay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax loop $ pop cx pop ax retDelay endpDisplayLED proc near

22、 ; 数码管显示子程序 mov bx, offset LEDBuf mov cl, 3 ; 共6个八段管 mov ah, 00000100b ; 从左边开始显示DLoop: mov dx, PB8255 ;位 mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, PA8255 ;段 out dx,al mov dx, PB8255 mov al, ah out dx, al ; 显示一位八段管 push ax mov ah, 1 call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, PB

23、8255 mov al, 0 out dx,al ; 关所有八段管 retDisplayLED endpDisplayResult proc near ; 结果显示子程序 mov al, CurTemp mov ah, 0 mov cl, 100 ; 先除以100,商存al,为百位的值 div cl mov ch, ah ;余数放ch保存起来 mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf, al ; 显示百位值 mov al,ch ; 把余数取出来放al再除以10 mov ah,0 mov cl,10 div

24、cl mov ch,ah mov ah,0 mov bx, offset LEDMAP add bx, ax mov al, bx mov LEDBuf+1, al ; 输出十位值 mov bx, offset LEDMAP mov al, ch mov ah, 0 add bx, ax mov al, bx mov LEDBuf+2, al ; 输出个位值 retDisplayResult endpIInit proc ; 8259初始化子程序 mov dx, CS8259A mov al, ICW1 out dx, al mov dx, CS8259B mov al, ICW2 out d

25、x, al mov al, ICW4 out dx, al mov al, OCW1 out dx, al retIInit endpIEnter proc near push ax push dx call ReadTEMP ; 调用ReadTemp得到平均温度 mov dx, PB8255 mov al, CurTemp out dx, al ; 输出当前温度值 call DisplayResult ; 显示结果 mov DelayT,1DispAgain1: ; 显示 call DisplayLED dec DelayT jnz DispAgain1 mov dx, CS8259A mo

26、v al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretIEnter endpReadAD proc near mov dx, AS0809 mov al, 0 out dx, al mov al, 60rr: dec al ; delay 延时 jnz rr mov dx, AS0809 in al, dx ;读出AD采样的二进制数据 retReadAD endpReadTemp proc near ;求平均温度子程序 mov bx, 0 mov cl, 16 ;设置采样的次数RLoop: call ReadAD ;调用ReadAD子程序 mo

27、v ah, 0 add bx, ax ;把采样的16次数据全部加起来 dec cl jnz RLoop shr bx, 4 ;除以16求平均值 mov ax, bx ;ax存放的是AD的平均采样数据 mov cl, HighTemp - LowTemp mul cl mov al, ah ; /256 add al, LowTemp mov CurTemp, al ;得到当前温度 retReadTemp endpstart proc near mov ax, data mov ds, ax mov CurTemp, 0 cli mov ax, 0 mov ds, ax mov al, MD82

28、55 ; 写8255控制字 mov dx, CTL8255 out dx, al mov bx, 4*ICW2 ; 中断号 mov ax, code shl ax, 4 ; x 16 add ax, offset IEnter ; 中断入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 代码段地址为0 call IInit mov ax, data mov ds, ax mov dx, PA8255 out dx, al stiagain: ; 等待中断 mov al, 0 mov dx, AS0809 out dx, al ; 起动 A/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1