序号:课程设计(微机原理及应用A)O—年七月八日课程设计任务书及成绩评定课题名称压力测控系统的设计I、题目的目的和要求:设计一个对压力传感器的信号进行检测并在LED数码显示器上显示压力值的系统,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。
当压力高于150pa 时,红灯闪烁。
LED的显示内容为P二XXX。
X为测试值。
II、设计进度及完成情况Ill、主要参考文献及资料《微型计算机原理及应用》清华大学出版社郑学坚周斌《微型计算机技术及应用》清华大学出版社史嘉权《微机原理与接口技术基础与应用》海洋出版社邓振杰《微机原理与接口技术实验及课程设计》西南交通大学出版社杨斌《单片机原理及接口技术》清华大学出版社梅丽凤王艳秋学科部主任___________ (签字)切、成绩评定:设计成绩:_________________ (教师填写)指导老师:(签字)二O—一年七月八日'、设计要求设计一个对压力传感器的信号进行检测并在LED数码显示器上显示压力值的系统,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。
当压力高于150pa 时,红灯闪烁。
LED的显示内容为P二XXX。
X为测试值。
二.设计思想压力测试系统的设计,必然要牵涉到压力的感应与转化,所以必须要有压力传感与A/D转换器。
将自然中的模拟量转化为电压信号,再转化位数字信号进行处理。
一个小型的微机系统,必须要有8086cpu来进行整体的控制,将其通过8255与A/D传感器进行连接。
这就是这个系统的主要框架。
而具体的应用框架则是在主要的框架上添加。
要当压力低于30pa时,黄灯闪烁。
当压力高于150pa时,红灯闪烁。
则应添加8255。
模块。
通过编程来控制黄灯与红灯的亮灭情况,考虑到要进行比较,所以我用了两个比较器进行数据的比较。
同时,由于灯要闪烁,闪烁周期要一秒,所以我们考虑到还要加一个8253芯片去控制。
但根据个人情况,这个模块我省略了。
而至于LED显示,且显示内容为三位。
我只在程序之中体现,而在硬件图中没有去体现。
三.系统设计框图四.程序流程图五.源程序;宏定义addr_8253 equ 208ha_8253equ addr_8253b_8253equ addr_8253+1h ctrl_8253equ addr_8253+3h addr_adc0809 equ 210haddr_8255equ200ha_8255equ addr_8255b_8255equ addr_8255+1hc_8255equ addr_8255+2h ctrl_8255equ addr_8255+3h・ ******************************************code segme ntassume cs:code,ds:code start:mov ax,cs mov ds,ax・ ******************************************;8253产生方形波,周期为1s,通道0mov dx,ctrl_8253 ;设置8253 控制口mov al,3eh ;控制字00111110 00表示计时器0; 11表示先读写低八位,后写读高八位;X11表示工作在模式3;0表示二进制计数out dx,al ; 写控制字mov dx,a_8253;设置计数初值(计数器0)mov ax,1000dout dx,al ;先写低八位,后写咼八位mov al,ahout dx,al;8253产生方形波,周期为1s,通道1mov dx,ctrl_8253;设置8253控制口mov al,7eh;控制字01111110 01表示计时器1;11表示先读写低八位,后写读高八位; X11表示工作在模式:3; 0表示二进制计数out dx,al ;写控制字mov dx,b_8253;设置计数初值(计数器1)mov ax,500dout dx,al ;先写低八位,后写咼八位mov al,ahout dx,al・ ******************************************;启动A/Dmov dx,addr_adc0809 ;ADC0809 out dx,al・ ******************************************5disp:;8255初始化;A 口做为段码输出,B 口做为位码输出,C 口低2位做为有色灯的输出mov dx,ctrl_8255 ;8255 初始化mov al,80h ;控制字10000000 1 表示方式控制字;00 端口A方式0; 0输出;0PC7-PC4输出;0定义端口 B 为0 输出;0 PC0-PC3输出 outdx,al ; 写控制字repeat:;初始化地址指针和位码lea bx,TABLE ;段码表首址送 bx Load effect address ------------------------- 取有效地址,也就是取偏移地址lea di,BUFDA ;指向缓冲区首地址 Load effect address ------------ 取有效 地址,也就是取偏移地址mov cl,0dfh ;11011111b 位码,共阴极,便于从第六位开始向低位依 次显示n ext: ;;输出位码显示子程序 ;8255B 口,输出位码 mov mov out dx,b_8255 al,cl dx,almov al,[di] ;从缓冲区取段码xlatmov dx,a_8255 ;输出段码到8255A 口out dx,al ;延迟push cxmov cx,30hdelay:loop delaypop cx;关LED 显示mov dx,a_8255 mov al,0 out dx,alcmp cl,11111110b ;已经显示最低位 jz convey ;显示完成 inc di ;指向下一个段码ror cl,1 ;显示向低一位转移jmp n extconv ey:;延时,方便LED显示结果及有色灯的闪烁cmp count,0 ;count 在后面定义jz adcall ;延时时间到,开始下一次的数据采样dec count ;延时时间未到jmp repeat ;*****************护卩 convey ・ ******************************************;ADC0809接收模拟信号并转化为数字信号adcall:call admov count,0ffh ;设置下一次数据米集的时间间隔jmp repeatTABLE:;段码表db 3fh;0db 06h;1db 5bh;2db 4fh;3db 66h;4db 6dh;5db 7dh;6db 07h;7db 7fh;8db 6fh;9db 73h;Pdb 48h;=db 00h;NULLBUFDA: ;显示缓冲区db 10,11,12,12,12,0 ;初始显示P= 0 count dw 0ffh・ ****************************************** ad proc ;读取AD转换结果并启动ADpush axpush bxpush cxpush dxpush dimov dx,addr_adc0809 ;通道0;读结果in al,dx ;数字量存放在al中;启动A/Dout dx,al ;启动下一次的ad转换push ax・ ******************************************;根据数字量的值判断有色灯是否要亮cmp al,30djb yellow ;小于30 小于则转移到目标指令执行cmp al,150dja red;大于150 大于则转移到目标指令执行mov dx,ctrl_8255;8255控制口push axmov al,00h;介于30和150之间,PC0输出低电平out dx,alpop axjmp red_yellow・ ******************************************5red: mov dx,c_8255 ;控制口mov al,02h ;8255 PC1 输出高电平out dx,aljmp red_yellowyellow: mov dx,c_8255 ;控制口mov al,01h ;8255 PC0 输出高电平out dx,alred_yellow:pop axmov ah,0・ ****************************************** ;将数字量转换成十进制,方便显示callpoppoppoppoppop ret ad endp bi nidec di dx cx bxax・ ******************************************5bini dec proc;将存放于AL中的数转换为十进制数存放到BUFDA中push axmov mov mov lea ah,0 ;ax=albl,10cx,4 ;di,BUFDA+5 ;指向显示缓冲区末尾bini dec_ next:div mov dec dec mov cmp jnz bl ;al:商,ah:余数[di],ahdicxah,0al,0bini dec_ nextbin idec_ nu II:mov dec loop pop ret bin idee byte ptr [di],12 di bini dec_ null axendp・ ****************************************** code endsend start六、设计心得经过一周的微机课程设计,让我对微机这一门课程有了系统的疏导。
在学习这门课程是我们只是独立的讲解一些芯片的结构及用法,而通过微机课程设计,在我们在构建一个小型的微机系统时,而真正的去关注这些芯片的连接。
这不但要求我们对各个芯片要有一定的了解与认知。
而且要懂得怎么融会贯通。
这是我在这次微机实习中体会最深的。
其二,通过微机课程设计,培养了我们想问题的思维方式。
以前我们想问题时总是将一些问题孤立出来去思考,而这次实习,他引导我们以多维的方式去解析整个问题。
在课程设计中,我们不但要理解好系统的结构,进而画出硬件连接图、而且要写出程序流程图及源程序就,这些虽然是不同的表现形式,但他们必须用统一的思想去认识。
其三, 通过对压力测试系统的设计,让我们更加了解了CPU8086 ADC0809 8255等芯片的用法,同时,也对汇编语言的编程有了更加深入的认识。
为以后单片机的学习奠定了一定的基础。