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语言使用说明书》中介绍。
一、定点报时器
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口。

如需更多的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段霓虹灯管的通断。可控硅的额定电流应大于灯管的工作电流。

程序清单如下:
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单片机应用产品。 (李中泽 陈伟)
