当前位置:文档之家› 远程监控系统

远程监控系统

远程监控系统1 题义分析及解决方案1.1 题义需求分析用STAR ES598PCI单板开发机,设计一个远程监控系统,并编程实现其功能:采用串口调试助手,通过串口进行控制,输入0001时,蜂鸣器鸣叫,输入0002,LED灯亮,输入0003LED 灯灭,输入0004后,再输入想要在LED灯上显示的数字或字母,控制LED显示器显示输入的数据。

问题归纳:1)接口问题,选用何种芯片。

这是关键的一步,这将直接影响到整个功能的实现;2)如何通过串口助手控制蜂鸣器鸣叫;3)如何通过串口助手控制继电器常开端闭合,常闭端开合;4)如何通过串口助手控制LED显示数据;1.2 解决问题方法及思路1.2.1 硬件部分:本程序用8251芯片提供串行接口输入和输出,采用8255芯片来提供并行接口的输入和输出,由8253芯片来提供8251的收发时钟,利用串口调试助手模拟上位机,从键盘接收命令由8251传送给上位机,经由程序体分析后将命令传给8255,即由8255相应的连接线路执行相应的命令实现功能。

在8255芯片的应用中,PC0口连接蜂鸣器,PC7口连接继电器,PA口连接LED位选,PB口用于控制LED的段选,硬件部分连接结束,其控制处理部分由程序来实现。

1.2.2 软件部分:对8253的初始化(定时器0,方式3,BCD码计数,CLK0/26),对8251初始化(波特率系数为16,8个数据位,一个停止位,偶校验),对于8255芯片,主要用于将CPU的命令输出,故PA、PB、PC三口均设置为方式0状态下工作。

由PA0~PA7来控制LED灯的位选,由PB0~PB7口来控制LED灯的段选。

当PC0口为低电平时蜂鸣器鸣叫,为高电平时蜂鸣器禁止鸣叫,PC7口对继电器的控制也同理。

从下位机的键盘键入命令字,通过命令字的判断,执行相应的功能,反复测试串口的接收,若有数据输入,判断并执行,如此反复循环下去。

2 硬件设计2.1 芯片(1)--8255A2.1.1芯片(1)在本设计中的作用通过8255接收上位机处理后传来的命令,由PA0~PA7来控制LED灯的位选,由PB0~PB7口来控制LED灯的段选,PC0口控制蜂鸣器的鸣叫,PC7口控制继电器的开合工作。

2.1.2芯片(1)的功能分析8255A是一种通用的可编程的并行I/O接口芯片,可用与连接PCI卡与外设,实现数据的的输入输出功能,可以对输入/输出的数据进行数据锁存和数据缓冲,有中断请求信号,可以向cpu发出中断请求,能进行单向和双向通信。

8255A有三个8位端口,其中A口具有数据输入锁存和数据输出锁存和缓冲功能,B口具有数据输入缓冲和数据输入/输出锁存/缓冲功能,C口具有数据出入缓冲和数据输出锁存/缓冲功能。

各口中含有控制电路,它还具有读写控制逻辑。

共有三种工作方式,通过初始化控制字的不同设置,决定8255A的工作方式和3个端口所具有的功能。

2.1.3 芯片(1)的技术参数达林顿驱动电流最大为4.0mA,LED工作电流为20mA,8255A的工作电流为低时,最大为0.45V,工作电流为高时,最小为2.4V,而LED为5V,因此需要一个驱动器来驱动,使工作电流和电压相匹配。

8255A技术参数表参数名称符号测试条件最大最小输入低电平电压Vol 0.8 -0.5V输入高电平电压Vih Vcc 2.0VVol Iol=2.5mA 0.45输出低电平电压(数据端口)输出低电平电压Vol Iol=1.7mA 0.45(外部端口)Voh Ioh=-400mA 2.4V输出高电平电压(数据端口)Voh Ioh=-200mA 2.4V输出高电平电压(外部端口)达林顿驱动电流Idar Rrxt=750v -4.0mA -1.0mA电源电流Icc Vrxt=1.5V 120mA输入负载电流Ill Vin +10/-10mA输出浮动电流Iofl Vofl +10/-10mA2.2 芯片(2)82532.2.1 芯片(2)在本设计中的作用为了实现8251A与PC机的串行通讯,使用8253作为分频器提供8251的收发时钟。

2.2.2 芯片(2)的功能分析8253A是一种可编程的定时器/计数器芯片,它可用于计数、分频、定时器等的方面。

它分频工作的功能:CLK引脚获得初始频率,此时若GATE为高电平,十六位计数初值寄存器中的数据装入计数执行单元CE中,它对CLK脉冲计数,每出现一个CLK脉冲,计数对执行单元CE的值减小。

当减为0时,通过OUT输出指示信号,表明计数执行单元已为0。

这时OUT输入的信号频率是CLK频率的1/N。

这样就达到了分频的目的。

8253A有5种工作方式:门脉冲控制时钟输入,用门脉冲重新启动计数器,用门脉冲停止计数器工作,单次计数,循环计数等8253的主要性能为:内有三个独立的16位计数器,工作方式可编程控制,计数脉冲频率为0MHZ-2.6MHZ,可以按二进制或BCD码计数,使用单一+5电源2.2.3 芯片(2)的技术参数输入低电压的范围是-0.5—0.8,输出低电压的范围0.45—2.4,输入高电压的范围是2.2—Vcc+0.5。

而测试条件均为Vin=Vcc—0V,Vout=Vcc—0.45V8253A的技术参数参数名称符号测试条件最大规范值最小规范值输入低电平电压VIL 0.8 -0.5V输入高电平电压VIA Vcc+0.5 2.2V输出低电平电压VOL Vin=Vcc--0V 0.45输出高电平电压VOH V out=Vcc--0.45V 2.4V输入负载电流IIL +/-10输出浮动漏电流IOFL +/-10电源电流Icc 1402.3 芯片(3)82512.3.1 芯片(3)在本设计中的作用芯片8251A用于实现设备间的串行通信,利用串口调试助手模拟上位机,由8251来实现计算机与串口之间的通信。

2.3.2 芯片(3)的功能Intel8251是一种通用的同步异步接收/发送器,可以通过编程选用同步/异步通信方式。

8251具有独立的发送器和接收器,能够以单工、半双工或全双工方式进行通信,并提供相应的控制信号,方便的与调制解调器连接。

表2-1:8255A与8251芯片的比较比较内容8255A芯片8251A芯片通信方式并行串行数据传送方式数据的各位同时传送,数据一位一位地顺序传送,,内部组成 8155内有256字节RAM 和一个定时计数器。

8255没有 特点 通信线路较8251复杂 通信线路简单,利用电话或电报线路就可实现通信输入/输出 编程较为灵活 编程较8255不够灵活应用范围使用十分方便,传输距离近,成本较高传输距离远,使用不方便,但传输速度慢,降低成本 ,初始化特点 8255A 直接位清0/置1功能简化了接口控制8251在初始化时,必须重新设置模式寄存器的格式.2.4 LED 显示器七段LED 显示器通过汇编语言控制,可以控制在哪几位数位上,哪几个发光二极管亮,从而现实数字。

其工作原理是:如果发光二极管共阳极,则输入为0,则发光;当为1时,不发光。

反之,如果发光共阴极,则输入1为发光,0时为不发光。

发光二极管是一种外加电压超过额定电压时发生击穿,并因此能产生可发光的器件。

数码显示器通常有多个发光二极管来组成,七段或八段笔画来显示器。

当段组合发光时,便会显示某一个数码管或字符。

七段代码的各位用作a-g 和DD 输入。

技术参数: PCW LF Vr Ir If p 对应变量 散射颜色 BT235 70 25 5 ≥1.5 ≤2.5 200 SEL-10 红 BT144 100 40 5 ≥0.5 ≤2.5 565 绿 BT134100405≥0.5≤2.5585蓝主要参数:此时的驱动电流为25 mA.LED 数码显示真值表:定义的十六进制 发光二极管 显示的数字 3FH 00111111 0 06H 00000110 1 5BH 01011011 2 4FH 01001111 3 66H 01100110 4 6DH 01101101 5 7DH01111101607H 00000111 7 7FH 01111111 8 6FH 01101111 9 77H 01110111 A 7CH 01111100 B 46H 01000110 C 5EH 01011110 D 7BH 01111011 E 71H 01110001 FLED数显2.5蜂鸣器CVccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11蜂鸣器原理图扬声器是将电能转化成声能,并将声能辐射到空气中去的一种电声转换器件。

当输入端输入一定频率的方波时,在RC震荡电路的作用下,蜂鸣器会发出一定频率的声音。

蜂鸣器的技术参数:一般包括灵敏度、频率响应、额定功率、额定阻抗、指向性、失真、音质听感评价等。

本实验只关心工作电压,其工作电压为5V。

2.6 继电器2.7 硬件总逻辑图及其说明 硬件接线图:R83 2KR82 5.1KQ518R81723 65 1 28OUT1 CLOSE1 OUT2 CLOSE2COM1COM2K1继电器原理图VCCJP30 D4在上图中8251A芯片的地址是由CS1 和A0决定的,其数据地址为00F0H,其控制字及状态字地址为00F1H,其芯片的TxCLK和RxCKL是连接在8253的OUT0上,用以提供8251的时钟频率,并将TxD和RxD与E7区的分别相连,其CLK与B2 区的4M相连提供自身的频率。

对于8253芯片的地址是由CS4 和A0、A1决定的,其控制字地址为00C3H,计数器0的地址为00C0H,其GATE0接C1区的VCC。

对于8255芯片的地址是由CS2和A0、A1共同决定的,其控制字地址为00E3H,PA 口偏移量为00E0H,PB口偏移量为00E1H,PC口偏移量为00E2H,其PA口接LED的位选,PB口接LED的段选,PC0口接蜂鸣器的Ctrl,PC7口接继电器的CTRL,而对于继电器的COM1口接一个发光二极管用以标记常开端和常闭端的开合情况,对于CLOSE1接地,OUT1口悬空即可。

3 控制程序设计3.1控制程序设计思路说明程序运行时处于死循环状态。

在输入四个命令字后同步由串口输出,将命令字取出并比较:若第一个数字为4则调用LED 显示子程序;若前三个均为0,将第四个数字与1比较(相同则调用蜂鸣器鸣叫子程序,然后从头执行,不同则继续下一步),将AL 与2比较(相同则调用继电器常开端闭合子程序,然后从头执行,不同则继续下一步),将AL 与3比较(相同则调用调用继电器常闭端闭合子程序,然后从头执行,不同则继续下一步);若前三个有任意个非0,则调用复位子程序。

详见程序流程图。

3.2程序流程图蜂鸣器流程图: 复位子程序流程图:继电器常开端闭合流程图: 继电器常闭端闭合流程图:主流程图如下:开始 开始 对8255PC 0口置1 对8255PC 0口置0 蜂鸣器停止鸣叫蜂鸣器鸣叫返回 返回 开始 开始 对8255PC 7口置1 对8255PC 7口置0 继电器常闭端闭合 LED 灯灭 继电器常开端闭合 LED 灯亮返回 返回 开始Y NNY NY YNY N YNLED 显示流程图:初始化 调用串口接收子程序 输入命令字 调用串口接收子程序 输出命令字 取缓冲区第一个字符送AL调用LED 显示子程序 AL= = 4?CH=3,CH 做计数器 AL= = 0? 调用复位子程AL 指向下一个字且CH 自减符 CH= = 0 ? AL = = 1?调用蜂鸣器子程序 调用置继电器常开端闭合子程序AL = = 2?调用置继电器常闭端闭合子程序 AL = = 3? 调用复位子程序开始NYNYNY3.3控制程序.MODEL TINY;使用8253的计数器0,外接2Mhz,经26分频DI 指向缓冲区第二个字符,放入AL 中,CH=3 BX 指向段选码表首地址 XLAT ,SI 指向段码缓冲区,AL 内容存入SI 中 CH 自减,SI 后移两位,DI 后移一位,内容保存入AL CH = = 0 ? 用BX 记录显示次数 定义位选入AH CX=6记录循环次数 SI 指向段码缓冲区,取段码送PB 口,取位选送PA 口 调用延时子程序,禁止显示,SI 指向下一个段码值,位选循环向右移一位CX 自减CX = = 0 ? BX 自减 BX = = 0 ?返回后,送给8251,产生4800bps PCIBAR3 EQU 1CH ;8位I/O 空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT RAM 板卡上的8237提供基地址) Vendor_ID EQU 10EBH ;厂商ID 号 Device_ID EQU 8376 ;设备ID 号 .STACK 100 .DATA CTL_ADDR DW 00F1H ;控制字或状态字 DATA_ADDR DW 00F0H ;读写数据 W_8253_T0 DW 00C0H ;计数器0地址 W_8253_C DW 00C3H ;8253控制字 COM_ADD DW 00E3H ;8255控制字 PA_ADD DW 00E0H ;PA 口偏移量 PB_ADD DW 00E1H ;PB 口偏移量 PC_ADD DW 00E2H ;PC 口偏移量 IO_Bit8_BaseAddress DW ? msg0 DB 'BIOS 不支持访问PCI $' msg1 DB '找不到Star PCI9052板卡 $' msg2 DB '读8位I/O 空间基地址时出错$' Receive_Buffer DB 4 DUP(0) ;接受缓冲器 Send_Buffer EQU Receive_Buffer ;发送缓冲器 SHOW DB 3FH,00H,3FH,00H,3FH,00H TIME db 3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;段选码表 .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP CALL InitPCI CALL ModifyAddress ;根据PCI 提供的基地址,将偏移地址转化为实地址 CALL INIT_8253 ;初始8253 CALL INIT_8251 ;初始8251 CALL INIT_8255 ;初始8255 START1: MOV CX,4 ;定义输入个数 CALL Receive_Group ;调用串口接收程序 MOV C X,4 CALL Send_Group;调用串口输出子程序LEA DI,Receive_Buffer ;取接受缓冲区的地址 MOV AL,[DI] ;将缓冲区的第一个字符送AL CMP AL, 4 ;将AL 与4相比 JNZ 1111 ;不相等则跳转 CALL START5 ;调用LED 显示子程序 1111:MOV CH,3 ;否则,CH 送3,将AL 与0比较 SSS:CMP AL, 0 JNZ call6 ;若AL 中的值不为0,则跳转INC DIMOV AL,[DI] DEC CH JNZ SSS CMP AL,1 ;若缓冲区前三个字符都为0,将第四个与1比较 JNZ 2222 ;不为1,则跳转 CALL START2 ;为1则调用蜂鸣器鸣叫子程序 2222:CMP AL,2;否则与2比较 JNZ 3333 ;不为2则跳转 CALL START3 ;为2则调用继电器常开端闭合子程序 3333: CMP AL,3 ;否则与3比较 JNZ CALL6 ;不为3则跳转 CALL START4;否则调用继电器常闭端闭合子程序 JMP START0 ;循环输入CALL6: CALL START6 ;调用复位子程序START0: CALL IfExitJZ START1;OUT1输出频率为1S的方波JMP Exit;初始8255INIT_8255 PROC NEARMOV DX,COM_ADDMOV AL,80H;对8255写控制字,ABC口均为输出OUT DX,ALMOV AL,01H;对8255置位复位,PC0口输出为1OUT DX,ALRETINIT_8255 ENDP;初始8253INIT_8253 PROC NEARMOV DX,W_8253_CMOV AL,37H ;定时器0,方式3OUT DX,ALMOV DX,W_8253_T0MOV AL,26H ;BCD码26(2000000/26)=16*4800OUT DX,ALMOV A L,0OUT D X,ALRETINIT_8253 ENDP;复位START6 PROC NEARMOV DX,COM_ADDMOV AL,01H ;PC0口置1 OUT DX,ALRETSTART6 ENDP;蜂鸣器鸣叫START2 PROC NEARMOV DX,COM_ADDMOV AL,00H ;PC0口置0 OUT DX,ALRET START2 ENDP;继电器常开端闭和START3 PROC NEARMOV DX,COM_ADDMOV AL,0EH ;PC7口置0OUT DX,ALRETSTART3 ENDP;继电器常闭端闭合START4 PROC NEARMOV DX,COM_ADDMOV AL,0FH ;PC7口置1OUT DX,ALRETSTART4 ENDP;LED显示START5 PROC NEARLEA DI,receive_buffer;DI指向接收缓冲区首地址INC DI ;DI指向第二个字符LEA SI,SHOW ;将SI指向显示缓冲区INC SI ;SI指向第二个单元MOV CH,3 ;设置次数ABC: MOV AL,BYTE PTR [DI] ;取DI中的内容入ALMOV BX,OFFSET TIME;取段码表地址入BXXLAT ;查表得段码MOV [SI],AL ;取段码保存在SI中INC DI ;DI指向下个单元ADD SI,2 ;SI加二DEC CHJNZ ABC ;循环取段码三次MOV BX,0AA00H ;设置显示循环次数CCC: LEA SI,S;SI指向显示缓冲区mov aH,11011111b ;定义位选 MOV CX,6 ;定义循环显示字符次数BCD: MOV AL,AHMOV DX,PA_ADDOUT DX,AL ;送位选MOV AL,[SI]MOV DX,PB_ADDOUT DX,AL ;送段码CALL DELY ;调用延时子程序mov al,0ffh ;禁止显示MOV DX,PA_ADDout dx,alINC SI ;SI指向下一个段码值 ROR AH,1 ;位选循环向右移一位 LOOP BCD ;循环显示下一字符 DEC BXJNZ CCC ;循环显示所有字符 RETSTART5 ENDP; 延迟子程序DELY proc NEAR ;延迟子程序,实现延时的功能。

相关主题