PS1008单片机采用PICBASIC语青,共有33条语句,可以完成算术逻辑运算、循环、跳转、输入输出、程序调试等操作。分两讲介绍。
一、基本规定
1.常数
PICBASIC的常数可以是数值或字符(串)。数值可用三种进制位表示:十进制、十六进制和二进制。表示十进制数值的数字不加任何标识;十六进制要在最高位数字前加3二进制则加%。字符(串)用双引号括起来。
例:100 '十进制
3 '十六进制
%01100100 '二进制
“A” '字符A
2.变量
PS1008提供了16个变量寄存器。其中一个表示引脚锁存器pins(pin0~pin7);另一个表示引脚输入/输出控制状态dirs(dir0~dir7);其余14个为通用变量B0~B13。这些变量用法十分灵活,既有位变量pin0~pin7、dir0~dir7、bit0~bit15又有字节变量B0~B13,还可构成7个字变量W0~W6。
数字写入dirs(dir0~dir7),“0”定义相应引脚为输入态;“1”定义相应引脚为输出态。若引脚为输出态时,写pins(pin0~pin7),则数据出现在I/O端口上,若引脚为输入态时,读pins(pin0~pin7),则读取I/O端口的状态。
3.运算符和表达式
(1)运算符
+ 加 & 逻辑与 = 等于
- 减 | 逻辑或 <> 不等于
* 乘(取低位字)^ 逻辑异或 =>或>= 大于等于
** 乘(取高位字)&/ 逻辑与非 =<或<= 小于等于
/ 除(取商) ∥ 逻辑或非 > 大于
∥ 除(取余数) / 逻辑异或非 < 小于
MTN 取两个操作数中最小者
MAX 取两个操作数中最大者
(2)运算规则
PICBASIC的运算符没有优先原则,它的运算规则为按从左至右的顺序进行。例如5+3*4,它的运算顺序是5+3再乘4,结果为32,而不是17。
(3)表达式
PICBASIC有三种表达式:算术表达式、逻辑表达式和条件表达式。例如:B2+58*B8(算术表达式),pins & %00110101(逻辑表达式),B13>72(条件表达式)。
(4)符号
在表达式中,为增加程序可读性,可把其中的常数或变量用符号另起一个名字。
定义符号可用PICBAS软件中的符号语句,其格式为:
SYMBOL 符号=变量/常数 '这个语句符号代表变量或常数
符号名不能用系统已定义的符号,包括语句、变量名和预定义的符号,如:LET、DIRS、T2400、N600等。
4.PICBASIC语句格式
PICBASIC语句的格式为:标号:语句定义符 语句体 '注释
其中,标号是表示某一地址的符号。它以字母开头,后接字母、数字和下划线,以冒号结束,且只能出现在执行语句前。语句定义符和语句体是语句核心,两者以空格隔开。语句定又符用便于记忆的英文单词或缩写表示;语句体是语句的操作对象(某些语句无语句体)。注释是对该语句的解释,便于阅读。在语句后注释,用撇号开头;注释为一单独行时用撇号或用REM开头。
二、PICBASIC语句种类及语句格式和功能
PICBASIC语句共有如下类型:输入/输出控制语句、模拟量输入/输出语句、数据操作语句、串行口控制语句、EEPROM操作语句、时间控制语句和调试语句。下面将逐一介绍。
1.输入/输出控制语句
(1)input 引脚号 '置I/O口为输入态
(2)output 引脚号 '置I/O口为输出态
(3)reverse 引脚号 '输入/输出状态转置
(4)high 引脚号 'I/O口输出高电平
(5)low 引脚号 'I/O口输出低电平
(6)toggle 引脚号 'I/O口输出电平反相
例:low 5 'P5口输出低电平
toggle 5 'P5口触发为高电平
若连续执行toggle语句,则出现周期为2ms(在4MHz晶振时)的方波。
(7)pulsin 引脚号,极性,变量
功能:以10微秒为单位测量输入脉冲宽度,将结果存入变量。
极性是一个值为0或1的常数/变量,它指定被测脉冲的极性(0为负脉冲,1为正脉冲)。
本语句测量范围为10~655350微秒,若超出此范围,则变量值为零。
例:pulsin 4,0,W2 '测量P4口输入的负脉冲宽度并把结果存入W2。
(8)pulsout 引脚号,时间
功能:将指定引脚的电平状态取反,持续给定的时间,然后再还原,以输出一个给定宽度的脉冲。
时间是一个值为0~65535的常数/变量,单位是10微秒。
例:low 2 'P2口输出低电平
pulsout 2,30 'P2口输出一个300微种宽的高电平脉冲
(9)button 引脚号,按下状态,去抖延时,重复速率,工作变量,测试状态,标号
功能:button 语句用于读取按钮(或开关)状态。
其中:
按下状态是值为0或1的常数或变量,它指定按钮按下时的状态,即低电平或高电平。去抖延时是值为0~255的常数或变量,它指定去抖的时间。去抖延时时间=“去抖延时”×button语句的循环时间。
重复速率是值为0~255的常数或变量,它指定重复的速率,时间同去抖延时。
工作交量是一个字节变量,是button语句的工作空间,第一次使用前须清零。
测试状态是值为0或1的常数或变量,它指示button语句在按钮状态(按下为1)与测试状态相待时,转向标号。
标号是按钮状态和测试状态相等时要转去的地址。
当去抖延时为零时,不去抖且总是重发。当去抖延时不为零而重复速率为零时,去抖但不重发。当去抖延时不为零且重复速率也不为零时,去抖并在持续按键时以指定的重复速率重发。
例:b2=0 '工作变量b2清零
low 0 'P0口输出低电平
loop:button 6,0,10,0,b2,0,loop1 '从引脚6读按键状态,当按键按下时为低电平。自动重复功能在10次包含button语句的循环后开始,重复速率为0,不重发。若按键没按下,跳转到loop1.
pulsout 0,50 'P0输出500微秒的正脉冲
loop1:pause 100 '延时100毫秒
goto loop
(l0)sound 引脚号,(声调,持续时间[,声调,持续时间…])
功能:在指定的持续时间内发出结定声调的声音。
其中:
声调是0~255的常数或字节变量,指定声音的频率。声调0为休止,声调l~127为上升的音阶,声调128~255为白噪声。
持续时间是0~255的常数或字节变量,时间=“持续时间”×22毫秒
例:b2=120
sound 1,(b2,50,25,50)'产生两个音阶,各持续1.1秒。
2.模拟量输入/输出语句
(1)pot 引脚号,比例系数,变量
功能:用来读入一个5k~50k电位器、热敏电阻等可变电阻器的输入(即一个电阻传感器的输入)。pot语句电路在第一讲中介绍过,pot语句通过测量充电后的电容的放电时间来测量电阻。
其中:比例系数是一个值为0~255的常数或变量,它用来量化读入的值,选择一个最佳的比例系数可将整个量移的电阻值尽可能细分为256等分。
例:pot 1,100,b2 '读取P1脚的可变电阻的相对值,比例系数是100。
(2)PWM 引脚号,占空比,持续时间
功能:输出一个脉冲宽度调制信号,用以实现一个廉价的8位分辨率的数模转换器。
其中:
占空比是一个值为0~255的常数或变量,它指定输出脉宽调制信号的占空比,单位是l/255。
持续时间是一个值为0~255的常数或变量,它指定输出持续时间,单位为5毫秒。
PWM语句作为模拟量输出,须经过RC平滑。但如果负载较重时,它将从RC电路中吸收过大的电流,那么程序就得增大PWM的持续时间以维持电容的电荷,否则PWM设置的电压就将下降。为克服这个缺点,可在PWM输出端接一高输入阻抗运放,运放增益设为1。
例:PWM 0,127,1 '输出持续时间5ms,占空比为1:1的脉宽调制信号。
3.数据操作语句
(1)[LET]变量=[-]变量/常数[运算符变量/常数…]
功能:它将表达式的值赋给量。可选的一号表示将第一项变量或常数取补(负)。
例:b2=b2/3 'b2中的值除以3,商存入b2
b3=b3+3*b7 'b3中的值加3再乘以b7内的值,积的低字节存入b3
(2)LOOKUP 序号,(数据表),Var
功能:从数据表中找出对应指定序号的数据存入变量Var。
数据表是以逗号分隔的常数或变量,Var是字节变量。
例:LOOKUP 2,(b1,b0,3,b5,0),b9 '执行结果b9=3
(3)lookdown 目的数据,(数据表),Var
功能:在数据表中从左至右查找自的数据,如在表中找到与目的数据相等的项,那么,将该项序号赋给变量。
例:lookdown 32,(15,20,32,34,23),b2 '执行结果b2=2
(4)RANDOM字变量
功能:产生一个伪随机数。(未完待续)(李中泽 陈伟)