接口与通信.docx
- 文档编号:10177863
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:24
- 大小:328.27KB
接口与通信.docx
《接口与通信.docx》由会员分享,可在线阅读,更多相关《接口与通信.docx(24页珍藏版)》请在冰豆网上搜索。
接口与通信
目录
1.8259外部中断控制……………………………………………………1
1
1.1课程设计要求……………………………………………………1
1.2课程设计目的……………………………………………………1
1.3实验电路…………………………………………………………1
1.4程序框图…………………………………………………………1
1.5程序代码…………………………………………………………2
1.6心得体会…………………………………………………………4
2.计时器的模拟实现……………………………………………………4
2
2.1课程设计要求……………………………………………………4
2.2课程设计目的……………………………………………………4
2.3电路原理图………………………………………………………4
2.4程序框图…………………………………………………………5
2.5代码设计及接线分析…………………………………………….5
2.6程序代码…………………………………………………………5
2.7心得体会……………………………………………………….10
3.温度采集及模拟控制……………………………………………….10
1
2
3
3.1课程设计要求………………………………………………….10
3.2课程设计目的………………………………………………….11
3.3程序框图……………………………………………………….11
3.4题目分析……………………………………………………….11
3.5程序代码……………………………………………………….12
3.6心得体会……………………………………………………….17
B.18259外部中断控制
(参考Lab8000.pdf中的:
硬件实验35)
1、课程设计要求
用8088/86控制8259可编程中断控制器,实现对外部中断的响应和处理。
要求程序中对每次中断进行计数,并将计数结果用8255的PA口输出到LED。
2、课程设计目的
(1)8088/86与8259的连接方法
(2)学习8088/86对8259的控制方法
3、实验电路:
4、程序框图:
5、代码如下:
modeequ82h;8255工作方式PA,PC输出,PB输入
PA8255equ8000h;8255PA口输出地址
CTL8255equ8003h;控制口端口
ICW1equ00010011b;单片8259,边缘触发,上升沿中断,单片,要写ICW4
ICW2equ00100000b;中断号为20H
ICW4equ00000001b;工作在8086/88方式,非特殊全嵌套,非缓冲方式
OCW1equ11111110b;只响应INT0中断
CS8259Aequ09000h;8259偶地址
CS8259Bequ09001h;8259奇地址
datasegment
CNTdb0
dataends
codesegment
assumecs:
code,ds:
data
IEnterprocnear;中断子程序
pushax
pushdx
movdx,PA8255
incCNT;计数值加1
moval,CNT
outdx,al;在8255的PA口输出计数值
movdx,CS8259A
moval,20h;中断服务程序结束指令
outdx,al
popdx
popax
iret;中断返回,恢复断点
IEnterendp
IInitproc;8259初始化子程序
movdx,CS8259A;设置初始化命令ICW1,写入偶地址端口
moval,ICW1
outdx,al
movdx,CS8259B;设置初始化命令ICW2,写入奇地址端口
moval,ICW2
outdx,al
moval,ICW4;设置初始化命令ICW4,写入奇地址端口
outdx,al
moval,OCW1;设置操作命令OCW1,写入奇地址端口
outdx,al
ret;返回
IInitendp
startprocnear;主程序
movdx,CTL8255
moval,mode
outdx,al;在8255的控制口端口写入控制方式字
cli;中断标志IF置0,禁止中断
movax,0
movds,ax
movbx,4*ICW2;中断号
movax,code
shlax,4;x16
addax,offsetIEnter;中断入口地址(段地址为0)
mov[bx],ax
movax,0
incbx
incbx
mov[bx],ax;代码段地址为0
callIInit;调用子程序对8259进行初始化设置
movax,data
movds,ax
movCNT,0;计数值初始为0
moval,CNT
movdx,PA8255
outdx,al
sti;中断标志IF置1,允许中断
LP:
;等待中断,并计数。
nop
jmpLP
startendp
codeends
endstart
6、心得体会:
这个实验比较简单,也不是第一次做了,通过书本及实验,对8259也的原理也相对了解,知道如何运用了,根据程序框图,代码很容易就明白了。
做起来还是很简单的。
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)熟练掌握总线方式驱动八段LED数码管
(4)熟练掌握汇编子程序的编写方法
(5)熟练掌握八段LED数码管的控制方式
3、电路原理图
4、程序框图
5、代码设计及接线分析:
由于题目要求该计时器的精度为0.1,而我选择接入的时钟脉冲为1MHz,它是精度为10^-6,所要要将其扩大10^5倍,而一个计数器计数的最大次数为2^16=65535<10^5,因此需要用两个计数器级联,计数器0的输出做计数器1的时钟信号,使其循环10^5次,从而达到0.1秒1跳。
则接线如下:
8253_CS->CS(0C000H)
8259_CS->CS(0D000H)
KEY/LED_CS->CS(8000H)
GATE0、GATE1->VCC
CLK0->1MHz
OUT0->CLK1、OUT1->INT0
5、代码如下:
CONTROLequ0c003h;计数器的控制端口
COUNT0equ0c000h;计数器0的入口地址
COUNT1equ0c001h;计数器1的入口地址
COUNT2equ0c002h;计数器2的入口地址
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
ICW1equ00010011b;单片8259,上升沿中断,要写ICW4
ICW2equ00100000b;中断号为20H
ICW4equ00000001b;工作在8086/88方式
OCW1equ11111110b;只响应INT0中断
CS8259Aequ0d000h;8259地址
CS8259Bequ0d001h
datasegment
LEDBufdb2dup(?
);显示缓冲
DelayTdb1dup(?
)
leftdb0;左边的值
rightdb0;右边的值
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
dataends
codesegment
assumecs:
code,ds:
data
Delayprocnear
pushax;延时子程序
pushcx
moval,0
movcx,ax
loop$
popcx
popax
ret
Delayendp
DisplayLEDprocnear
movbx,offsetLEDBuf
movcl,2;共2个八段管;cl的值由6改成2
movah,00100000b;从左边开始显示;把原本的00100000改成00000010
DLoop:
movdx,OUTBIT
moval,0
outdx,al;关所有八段管
moval,[bx]
movdx,OUTSEG
outdx,al
movdx,OUTBIT
moval,ah
outdx,al;显示一位八段管
pushax
movah,1;用来觉得延时程序调用的次数
callDelay
popax
shrah,5;因为要实现一个在最右端,一个在最左端,所以右移5位
incbx
deccl
jnzDLoop
movdx,OUTBIT
moval,0
outdx,al;关所有八段管
ret
DisplayLEDendp
IEnterprocnear
pushax
pushdx
decright
moval,right
cmpal,0ffh;由于是从9.0开始倒数,0自减1后变为0ffh,所以要与0ffh比较
jneExit
movright,9
decleft
moval,left
cmpal,0ffh
jneExit
movleft,9
Exit:
movdx,CS8259A
moval,20h;中断服务程序结束指令
outdx,al
popdx
popax
iret
IEnterendp
IInitproc
movdx,CS8259A
moval,ICW1
outdx,al
movdx,CS8259B
moval,ICW2
outdx,al
moval,ICW4
outdx,al
moval,OCW1
outdx,al
ret
IInitendp
startprocnear
movax,data
movds,ax
movleft,9
movright,0
cli
movax,0
movds,ax
moval,36h;00110110B;计数器0,16位,方式3,二进制
movdx,CONTROL
outdx,al
movax,1000
movdx,COUNT0
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
moval,76h;01110110B;计数器1,16位,方式3,二进制
movdx,CONTROL
outdx,al
movax,100
movdx,COUNT1
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
movbx,4*ICW2;中断号
movax,code
shlax,4;x16
addax,offsetIEnter;中断入口地址(段地址为0)
mov[bx],ax
movax,0
incbx
incbx
mov[bx],ax;代码段地址为0
callIInit
movax,data
movds,ax
sti
LP:
;等待中断
moval,left
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx]
oral,80h;使小数点能显示出来
movLEDBuf,al
moval,right
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx]
movLEDBuf+1,al
callDisplayLED
moval,left;用于判断是否倒数到0,先判断左边的一位
cmpal,0;若左边为0,则再判断右边
jnzLP;当两位数都为零,则关中断
moval,right;不必继续循环倒数
cmpal,0
jnzLP
cli
jmpLP
startendp
codeends
endstart
心得体会:
这个题目相对于第一个来说,难度有所提高,设计代码时主要是精度为0.1的设计会比较困难,要用到两级计数器级联;另外就是中断的判断是0ffh而不是0这里一不留神就很容易出错;接着就是设置什么时候停止倒数。
解决以上问题,整份代码就基本出来了。
完成得还不错。
B.3温度采集及模拟控制
(参考Lab8000.pdf中的:
硬件实验14、23、26)
1、课程设计要求
利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟温度输入,编制程序,将模拟量转换成二进制数字量,采用中断方式下,A/D转换结束后会自动产生EOC信号,将其与CPU的外部中断相接,编程用中断方式读回A/D结果。
同时,通过8255A控制八段LED数码管控制计数值的显示温度
注意:
1)参考电压
2)将电位器的最大值和最小值对应的模拟量测量出来
2、课程设计目的
(1)熟练掌握ADC0809的功能
(2)熟练掌握8259A外部中断及中断服务程序的设计
(3)熟练掌握8255A方式驱动八段LED数码管
(4)熟练掌握汇编子程序的编写方法
(5)熟练掌握八段LED数码管的控制方式
3、程序框图
4、题目分析
该题目主要是通过电位器产生模拟温度输出,用0809进行转换,并自动产生EOC信号,与8259相接;8259收到信号后,产生中断,通过8255的PA、PB端口作为段和位,输出当前温度。
主要设计:
因为电位器输出不是很稳定,则采用平均采样,每次输出当前温度,先进行16次采样,求出平均值,再输出;为了使显示的温度停留时间加长,采用循环显示1次;由于每次采集温度,都需要启动0809,则在主程序中加了0809的循环启动;因为温度的取值范围为:
0~2^8-1,则,设置显示结果的时候用3个数码管显示,还要对没一位值对应输出等。
5、代码如下:
MD8255equ080h;方式0,PA,PC输出,PB输入
PA8255equ8000h;PortA
PB8255equ8001h;PortB
CTL8255equ8003h;8255控制端口
AS0809equ0c000h;AD采样输入片选
ICW1equ00010011b;单片8259,上升沿中断,要写ICW4
ICW2equ00100000b;中断号为20H
ICW4equ00000001b;工作在8086/88方式
OCW1equ11111110b;只响应INT0中断
CS8259Aequ0d000h;8259地址
CS8259Bequ0d001h
LowTempequ0;A/D0
HighTempequ255;A/D255
datasegment
LEDBufdb3dup(?
);显示缓冲
DelayTdb1dup(?
)
CurTempdb1dup(?
);当前的温度
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
dataends
codesegment
assumecs:
code,ds:
data
Delayprocnear
pushax;延时子程序
pushcx
moval,0
movcx,ax
loop$
popcx
popax
ret
Delayendp
DisplayLEDprocnear;数码管显示子程序
movbx,offsetLEDBuf
movcl,3;共6个八段管
movah,00000100b;从左边开始显示
DLoop:
movdx,PB8255;位
moval,0
outdx,al;关所有八段管
moval,[bx]
movdx,PA8255;段
outdx,al
movdx,PB8255
moval,ah
outdx,al;显示一位八段管
pushax
movah,1
callDelay
popax
shrah,1
incbx
deccl
jnzDLoop
movdx,PB8255
moval,0
outdx,al;关所有八段管
ret
DisplayLEDendp
DisplayResultprocnear;结果显示子程序
moval,CurTemp
movah,0
movcl,100;先除以100,商存al,为百位的值
divcl
movch,ah;余数放ch保存起来
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx]
movLEDBuf,al;显示百位值
moval,ch;把余数取出来放al再除以10
movah,0
movcl,10
divcl
movch,ah
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx]
movLEDBuf+1,al;输出十位值
movbx,offsetLEDMAP
moval,ch
movah,0
addbx,ax
moval,[bx]
movLEDBuf+2,al;输出个位值
ret
DisplayResultendp
IInitproc;8259初始化子程序
movdx,CS8259A
moval,ICW1
outdx,al
movdx,CS8259B
moval,ICW2
outdx,al
moval,ICW4
outdx,al
moval,OCW1
outdx,al
ret
IInitendp
IEnterprocnear
pushax
pushdx
callReadTEMP;调用ReadTemp得到平均温度
movdx,PB8255
moval,CurTemp
outdx,al;输出当前温度值
callDisplayResult;显示结果
movDelayT,1
DispAgain1:
;显示
callDisplayLED
decDelayT
jnzDispAgain1
movdx,CS8259A
moval,20h;中断服务程序结束指令
outdx,al
popdx
popax
iret
IEnterendp
ReadADprocnear
movdx,AS0809
moval,0
outdx,al
moval,60
rr:
decal;delay延时
jnzrr
movdx,AS0809
inal,dx;读出AD采样的二进制数据
ret
ReadADendp
ReadTempprocnear;求平均温度子程序
movbx,0
movcl,16;设置采样的次数
RLoop:
callReadAD;调用ReadAD子程序
movah,0
addbx,ax;把采样的16次数据全部加起来
deccl
jnzRLoop
shrbx,4;除以16求平均值
movax,bx;ax存放的是AD的平均采样数据
movcl,HighTemp-LowTemp
mulcl
moval,ah;/256
addal,LowTemp
movCurTemp,al;得到当前温度
ret
ReadTempendp
startprocnear
movax,data
movds,ax
movCurTemp,0
cli
movax,0
movds,ax
moval,MD8255;写8255控制字
movdx,CTL8255
outdx,al
movbx,4*ICW2;中断号
movax,code
shlax,4;x16
addax,offsetIEnter;中断入口地址(段地址为0)
mov[bx],ax
movax,0
incbx
incbx
mov[bx],ax;代码段地址为0
callIInit
movax,data
movds,ax
movdx,PA8255
outdx,al
sti
again:
;等待中断
moval,0
movdx,AS0809
outdx,al;起动A/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 通信