4.串行口控制语句
(1)Serin 引脚号,速率,(格式字符[,格式字符…])
Serin 引脚号,速率,(格式字符[,格式字符…]),[#]Var[,[#]Var…]
Serin 引脚号,速率,[#]Var[,[#]Var…]
功能:在指定的引脚建立一个软串行口,按给定的速率接收字符,如果在速率之后有格式字符出现,那么它必须按给定的次序接收这些字符,然后才能退出(其后无变量)或继续接收字符(其后有变量)。如果接收变量之前没有#号,那么直接将收到的字符赋给变量Var,一个字符放入一个变量,直至所有变量都接收到字符。如果变量之前有#号,那么它将接收一个(串)以非数字字符结束标志的数字字符,并将它们转换成数值并赋给变量。
串行通信的数据格式为:8位数据位,一个停止位。
波特率有以下8种:T2400、T1200、T600、T300、N2400、N1200、N600和N300。其中前缀“T表示原码通信,“N”表示反码通信。T和N分别用于不同的连接和接口。
例:input 1 ′P1为输入态
Serin 1,N1200,(“A”,“B”),b2 ′等P1输入字符A和B后,再将后续字符赋给b2。传输速率为1200波特率,接收相位取反。
(2)Serout 引脚号,波特率,([#]数据[,[#]数据…])
功能:在指定引脚建立一个串行输出口,按指定的速率和方式将给定的数据发送出去。如果数据前有#号,那么将组成该数据的十进制值以数字字符发出。
Serout语句的波特率和串行通信数据格式同Serin语句。
例:Serout 1,T300,(#“A”) ′在P1口以300波特率的速率,按原码方式送出$36和$35。(A的ASCII码为65)
(3)IICIN 引脚号,器件类型,器件选择,[(器件内低位地址,[,器件内高位地址])],变量,变量 IICOUT 引脚号,器件类型,器件选择,[(器件内低位地址,[,器件内高位地址])],数据,数据…
功能:IICIN语句为读I2C器件,IICOUT为写I2C器件。
PS1008利用任意两个相邻的I/O口,即可形成一个I\(^{2}\)C总线接口。可挂接具有I2C接口芯片(如EEP-ROM芯片、LED驱动芯片、I/O扩展芯片等),传递速率为60kHz(4MHz晶振)。其中:
引脚号:指定I2C器件的时钟线引脚(SCL),I\(^{2}\)C的数据线引脚为时钟线加1的引脚。如指定引脚1为时钟线,引脚2即为数据线;若指定引脚7为时钟线,则引脚0为数据线。
器件类型:指定语句寻址的I2C器件类型。每一类I\(^{2}\)C器件都有固定的I2C地址。器件类型就是从器件地址的高四位。例如RAM器件高四位为1010,4-DIGI-TLED DRIVE的高4位为0111,等等。
器件选择:是值为0~7的常量或变量。器件选择也就是七位I\(^{2}\)C从器件地址的低3位(器件类型+器件选择为七位I2C从器件地址)。当值为0~7时,它指定挂接在总线上的多个同类器件中的一个(若只挂一个,一般为零)。对某些器件,此三位数与随后指定的八位地址一起构成器件的内部地址,以允许该器件的地址空间达2K。
器件内低位地址、器件内高位地址:是所指定的I\(^{2}\)C器件的内部地址。这是一个可选项。因为对于有些I2C器件不需要器件的内部地址,故使用这类I\(^{2}\)C器件时可省略此项。
IICIN中各参数在I2C数据传送格式中的位置如图1所示。

其中,S为启动位,A为应答位,R/W-为读/写位,P为停止位。
IICOUT中各参数在I\(^{2}\)C数据传送格式中的位置如图2所示。

其中,S为启动位,A为应答位,R/W-为读/写位,P为停止位。
例:以P0口为时钟线,P1口为数据线建立一I\(^{2}\)C总线接口,扩展一片24LC01B。
IICOUT 0,10,0(20),$AA,$55 ′指定P0为时钟线,P1为数据线,10为24LC01B的从器件地址高4位,0为24LC01B的从器件地址低3位,20为24LC01B的地址单元,$AA和$55写入到24LC01B的20和21地址单元。
IICIN 0,10,0(20),B0,B1 ′指定P0为时钟线,P1为数据线,10为24LC01B的从器件地址高4位,0为从器件地址高3位,24LC01B的地址单元20和21的内容读入并存到B0和B1中
5.EEPROM操作语句
(1)EEPROM [地址],(数据,数据…)
功能:在EEPROM的数据空间预先存入常数,以供程序使用。
其中:地址是一个常数或变量,它指定有效的起始地址。如果不指定地址,那么接上一条EEPROM语句存放的最后一个数据往下存放;如果是第一个EEP-ROM语句,则从0单元开始。EEPROM语句应放在程序的开始。
例:EEPROM 20,(80,72,33,65) ′将80,72,33和65依次存入20、21、22和23地址单元中
(2)READ 地址,变量
WRITE 地址,常数/变量
功能:READ语句是将指定的EEPROM地址的内容读出,并存入变量中;WRITE语句把数据写入到指定的EEPROM地址单元中。
EEPROM即可作程序存储器,也可作数据存储器。EEPROM的511单元中存放最后一条语句的地址单元,510单元存放最后一条语句的页面地址,见图3。

例:下面的程序是从P0口接收数据并存满空间。
read $1FF,b0 ′读最后一条语句的地址单元
read $ 1FE,b1 ′读最后一条语句的页面地址
loop:W0=W0-1 ′地址单元减1
Serin 0,T2400,b3串行接收数据存放在b3
Write W0, b3 ′把接收的数据写到数据空间
if W0>0 then loop ′数据空间用完否?没用完转loop
end ′数据空间用完
6.循环转移语句
(l)GOTO 标号
功能:使程序无条件地转向标号指示的地址。
(2)GOSUB 标号
RETURN
功能:从主程序转子程序使用GOSUB语句。子程序执行完后用RETURN语句返回。
(3)BRANCH 变量,(标号0,标号1,…,标号n)
功能:根据变量的值使程序转向不同标号指示的地址。如果变量的值为0,则转至标号0,为1转至标号1,依此类推。如果变量值大于n,那么执行下一条语句。
(4)IF 条件表达式 THEN标号
功能:它计算条件表达式。如果为真,那么转到给定的标号指示的地址;否则顺序执行下一条语句。
条件表达式的结构为:变量 op 常数/变量[AND|OR变量1op 常数/变量…]。其中,AND表示与,OR表示或,op为条件运算符。
例:IF b3<=9 THEN NOADD7 ′如果b3≤9,那么转到NOADD7
b3=b3+7
NOADD7:b3=b3|$30
DEBUG b3
(5)FOR 变量=初值 TO终值 [STEP[-]步长]
NEXT
功能:执行给定次数的重复动作(循环体)。
其中:初值、终值和步长为常数或变量。步长可为正或负,缺省时为1。循环语句可以嵌套,但不能超过八级。
例:DIRS=255 ′置I/O口都为输出
FOR b2=0 TO 255 Step 2 ′建立一个FOR…NEXT循环,步长为2
pins=b2 ′b2的值依次出现在I/O口上
Pause 100
NEXT
7.时间控制语句
(1)PAUSE 时间
功能:暂时停止程序的执行,或是延时一段时间。
其中:时间是一个值为0~65535的常数或变量,其单位为1毫秒。
例:PAUSE 200 ′延时2秒
(2)SLEEP 秒数
功能:使PS1008处于睡眠状态,以节省电能。
其中:秒数是值为0~65535的常数或变量,它指定PS1008的睡眠时间。PS1008在经过指定的秒数后自动醒来,继续工作。
例:SLEEP 3600 ′使PS1008睡眠1小时
(3)END
功能:可选的结束语句。它表示源程序结束,如用户程序结尾未加此语句,编辑软件PICBAS将自动在最后一条语句后加上此语句。
8.调试语句
DEBUG 显示内容/命令[,显示内容/命令…]
功能:当PS1008系统与PC机连机编程时,可用DEBUG语句在PC机上显示变量的值或其它信息,以观察程序的运行情况。
其中:显示内容可为下列三种之一:
[$/%/@]变量 显示“变量名=变量值”,如带$,%或@,则分别按十六进制、二进制显示或显示成字符,否则,按十进制显示变量值。
#[[$/%/@]变量 显示变量值。变量按十进制显示,如带有$,%或@则分别按十六进制、二进制显示或显示成字符。
字符串 显示该字符串,字符串必须用双引号括住。
命令可以为:
CLS 清除DEBUG窗口
Cr 另起一行
(李中泽 陈伟)