第三讲 PIC58BS—BASIC单片机应用实例

🏠 首页 《无线电》杂志 1995年 🔗 第5期 🔗 第34页 分类:无线电技术自学经验交流 🔗 陈伟 🔗, 李中泽 🔗

PIC58BS的32条语句,为用户编写应用程序提供了极大便利。其灵活的I/O口可以方便的扩展液晶显示、 LED显示输出以及多达20个按键输入,可完成各种测量、控制;还可串行输入、输出数据等等。在许多应用中,使用PICS58BS不仅可以事半功倍,而且有助于降低应用系统的成本、体积和功耗。

PIC58BS的硬件资源为8个双向可独立编程的I/O口。在某些应用中,可能感到I/O口太少。此时可利用带锁存器的接口芯片分时共享8个I/O口完成不同的功能。各种译码、解码芯片也可扩展I/O。另外,其串行通信方式只需两根I/O即可与各种单片机传送数据。

有些读者可能担心BASIC单片机运行程序速度慢,但每秒执行2000条高级语言的速度,相信能满足一般用户的要求。

下面给出了PIC58BS的几个应用实例。为方便设计,下面的几例中均使用PIC58BS-CUM。读者也可自己设计PIC58BS芯片所需的电源、晶振、复位等外围电路。

有关其详细的应用实例将在《PIC58B暨PICBASIC语言使用说明书》中介绍。

一、定点报时器

在如图1所示的电路中运行下面的程序,可以实现每隔一小时,压电蝉鸣器发出5次“嘟”的声音。

图1
图1 🔍原图 (356×309)

dirs=%11111111′I/O全为输出态

pins=%00000000′输出低电平

main:sleep 3126*′进入睡眠一小时

for b2=1to 5′发出5声“嘟”音频为

sound 0,(250,20)′2kHz,持续440ms。

pause 400′延时400ms

next

goto main′重新开始循环

*时间精度可能略有误差,读者可微调此参数,以达到精确的时间。

编辑、调试、写入该程序的步骤如下:

连接好电路及与PC机的通信电缆。接上9V的电池(也可接上3~6V的用户电源)。

将“编辑、汇编”软盘插入驱动器。在目标驱动器的DOS提示符下键入PICBAS,回车。则进入编辑状态,可输入程序。该编辑软件具有剪切、复制等功能,可以帮助读者更快更好的编辑应用程序。

按动Alt-R键,可将程序写入PIC58BS-CUM的EEPROM中,运行程序。如果程序不符合PIC58BS语言格式,则光标移至该处,直到修改正确为止。如果程序运行不正确,可通过DEBUG语句监视每段程序的运行,找到编程错误之处。

程序写入运行成功,可拨下与PC机的通信电缆,即告设计成功。

二、数码管显示(LED)电位值、输入脉冲宽度、串行输入数据及按键响应

如图2所示的电路图,利用三片廉价的BCD-7段译码/锁存器MC14511驱动数码显示,它将占去PIC58BS的7根I/O。但由于MC14511片内有锁存(LE为“1”,则锁存并输出LE为“0”时刻的BCD码),所以PIC58BS的PO~P3口还可作别的用途。例中的“按键响应”和“输入脉宽测量”就是复用了PO口。

图2
图2 🔍原图 (1299×1105)

如需更多的LED显示,可利用译码器(如74HC138,74HC139等),以减少占用的I/O口的资源。也可直接利用MAX7219串行接口八位LED显示驱动器和MC14499串行接口四位LED显示/驱动器。

该例中由于是静态显示数码值,如使用5V的电源,则数码管的驱动电流过大,所以应选择3~4V的外部电源。图2中通过10Ω/1W的电阻给MC14511的电源供电,以限制流入LED显示器的电流。该例中使用共阴极数码管作显示。

1.显示电位值

PIC58BS中的POT语句可测量电位值或热敏电阻、光敏电阻值。这样PIC58BS可以很容易的做成温度计,温控器等。下面的“应用1”,可以将电位器的值读出,并通过数码管显示出来。

该应用中使用18.5kΩ的电位器。读取的电位值放在变更b2中。换算成电阻为b2/255×18.5k,取前三位有效数。

在运行POT语句前需先找出“可调值”。按Alt-P键,则屏幕出现一个窗口,光标在“0”处。按左移键“←”, 将光标移至“7”处(在P7口读入电位值),回车。则出现scale=XX和vabue=YY。调节电位器,则scale值会变化。其最小值即为POT语句中的“可调值”。按“空格”键可以观测相对电阻值YY(此时调整电位器。其值将发生变化)。该例中的“可调值”为41。

程序开始运行,读取P7脚的电位值,存入b2。然后将b2值换算成实际的电阻值存入b3。数码管显示出b3的值。延时0.3秒,程序每0.3秒采样输入的电位值并显示。该例中就是利用了MC14511的锁存功能;同一时刻只传送一路BCD码,而锁存另外两路BCD码。

程序清单如下:

dirs=255′将所有的I/O口置为输出态

masn:Pot7,41,b2′读取相对电位值

b3=b2*185/255′转换成实际的电位值

pins=b3/100+%00110000′显示最高位值

pins=b3//100/10+%01010000′显示第二位值

pins=b3//100//10+%01100000′显示最低位值

pins=pins│$70′锁存并显示所有的数据

pause 300′延时300ms

goto main′重新读取电位值

该程序写入后,如调整电位器,则不断的显示与电容相连的电阻值。

注:该应用中,读者可将电容值换成0.033μF,则测量精度可提高。

2.串行接收数据并显示

该应用将P7口改为串行输入,接收从PC机送出的数据并显示。程序清单如下:

drs=%00111111′设置I/O口的状态

main:serin7、n2400,b3′串行接收反码数据

pins=b3//$10+$20′显示低位数

Pins=b3/$10+$10′显示高位数

goto main′返回主程序继续接收数据

在PC机中运行“DEBUG”,可向串行口(口地址为3F8)写入数据。

在A>提示符下键入DEBUG(该盘中应有DEBUG程序),回车。出现“-”后键入03FS XX在“应用2”中,将PIC58BS-CUM与PC的串行口连好后,装入该程序。则PC机每送一个数据,数码管的低二位将显示出所送的数。例如:在PC机键盘上键入38,则数码显示38。

3.按键响应

该应用中,复用P0口作按键输入。运行下面的程序后,数码管显示全“0”。如有按键,则每按一次键,显示的数据加1,如按键不放开,则显示数据连续不断的作加计数。计满1000后,清零计数。其中“dis”为显示子程序。

该例有助于读者理解BUTTON语句中的“延时”和“自动重复率”。

程序清单如下:

dis:dirs=255

pins=W3/100+%00110000

pins=w3//100/10+%01010000

pins=W3//100//10+%1100000

pins=pins│$70

dirS=254

return

main:W3=0

Input

b2=0

loop:button 0,1,5,50,b2,1,abc

goto loop

abc:w3=w3+1

if W3=1000 then main

gosub dis

goto loop

4.输入脉冲测量

PIC58BS中的pulsin语句可方便的用于转速测量,频率测量等。该例可测量P0口输入的高电平脉冲,并显示出来。运行下面程序后,如按一下P0口的按键,则可显示出按键的时间(以ms为单元)。

loop:pulsin 0,1,w2

if W2=0 then loop

W3=W2/100

gosub dis

goto loop

注:该例中省略了数码显示“dis”子程序。

三、霓虹灯控制器

PIC58BS用于定时、测控十分方便。在许多应用中,无需改动硬件电路,即可改变测控方式。如交通灯控制、电机控制、遥控智能玩具、多点温度控制等等。

下面的应用可用软件随意控制一排霓虹灯管的闪烁方式。

在如图3所示的电路中,用ULN2981芯片驱动双向可控硅控制8段霓虹灯管的通断。可控硅的额定电流应大于灯管的工作电流。

图3
图3 🔍原图 (1548×653)

程序清单如下:

dirs=255′置I/O为输出态

main:pins=255′I/O口输出高电平,灯管全亮。

pause 2000′保持2s

for b3=0 to7′灯管依次熄灭,间隔为0.2s。

low b3

pause 200

next

pause 500′全灭0.5s

b4=7-b3

forb4=0to7′灯管依次点亮,间隔为0.2s。

high b4

pause 200

next

pins=%00011000′灯管从中间向两边依次点亮

pause 300

pins=%00111100

pause 300

pins=%01111110

pause 300

Pins=%11111111

pause 300

goto main′从头开始循环

上面的几个例子作为抛砖引玉。我们期待着广大的读者设计出更多、更好的PIC58BS单片机应用产品。 (李中泽 陈伟)