PS1008 BASIC单片机语系统(二)

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

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所示。

图1
图1 🔍原图 (5356×1419)

其中,S为启动位,A为应答位,R/W-为读/写位,P为停止位。

IICOUT中各参数在I\(^{2}\)C数据传送格式中的位置如图2所示。

图2
图2 🔍原图 (3994×1563)

其中,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。

图3
图3 🔍原图 (1963×1619)

例:下面的程序是从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 另起一行

(李中泽 陈伟)