STC12C5A60S2单片机内部ADC只有一个,虽然外部可以用P1口的8个脚,作8个通道的输入,但在采集数据时,只能开通一个通道,不允许8个通道都开的,所以,会互相影响的。
如果是单独使用的话都可以正常工作,就应该是每个都要单独用的。所以,两个通道都用,也要按单独使用那样来转换。
就算是8个通道都用,也不可能是同时转换的,也要切换每一个通道分时转换的。
1.串行口1的控制寄存器SCON和PCON
STC12C5A60S2系列单片机的串行口1设有两个控制寄存器: 串行控制寄存器SCON和波特率选择特殊功能寄存器PCON。
串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下:SCON: 串行控制寄存器(可位寻址)
SMO/FE: 当PCON寄存器中的SMODO/PCON.6位为1时,该位用于帧错误检测。当检测到一个无效停止位时,通过UART接收器设置该位。它必须由软件清零。
当PCON寄存器中的SMODO/PCON.6位为0时,该位和SM1一起指定串行通信的工作方式,如下表所示。
2.其中SMO、SM1按下列组合确定串行口1的工作方式:
SM2: 允许方式2或方式3 多机通信控制位。在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时可以利用接收到的第9位(即RB8)来筛选地址帧: 若RB8=1,说明该帧是地址帧,地址信息可以进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较; 若RB8=0,说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的信息进入SBUF,并使RI=1,此时RB8通常为校验位。方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2 应为O.
REN; 允许禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。
TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据的校验位或多机通信中表示地址帧数据帧的标志位。在方式0和方式1中,该位不用。
RB8:; 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧‘數据帧的标志位。方式0中不用RB8(置SM2=0)。方式1中也不用RB8(置SM2=0,RB8是接收到的停止位)。
TI:发送中断请求中断标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。
RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须由软件清零。
SCON的所有位可通过整机复位信号复位为全“0”。SCON的字节地址为98H,可位寻址,各位地址为98H~~9FH,可用软件实现位设置。
串行通信的中断请求: 当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理;当接收完一帧信息时,内音硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以“或逻辑”关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。
电源控制寄存器PCON中的SMOD/PCON.7用于设置方式1、方式2、方式3的波特率是否加倍。
电源控制寄存器PCON格式如下:
PCON: 电源控制寄存器(不可位寻址)
SMOD: 波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1.2、3的波特率加倍; SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。
SMODO: 帧错误检测有效控制位。当SMOD0=1,SCON寄存器中的SMO/FE位用于FE(帧错误检测) 功能;当SMOD0=0,SCON寄存器中的SMO/FE位用于SMO功能,和SM1一起指定串行口的工作方式。复位时SMOD0=01]山
3.辅助寄存器AUXR
辅助寄存器AUXR的格式及各位含义如下:
AUXR: 辅助寄存器(不可位寻址)
TOx12; 定时器0速度设置位
0,定时器0是传统8051速度,12 分频;
1,定时器0 的速度是传统8051的12 倍,不分频
T1X12: 定时器1速度设置位
0,定时器1是传统8051速度,12 分频;
1,定时器1的速度是传统8051的12 倍,不分频
如果UART串口用定时器1做波特率发生器,T1x12位就可以控制UART串口是12T还是1T 了。
UART_MOX6: 串行口模式0的通信速度设置位
0,UART串口的模式0是传统12T的8051速度,12分频;
l,UART串口的模式0的速度是传统12T的8051的6倍,2分频
BRTR: 独立波特率发生器运行控制位
0,不允许独立波特率发生器运行;
1,允许独立波特率发生器运行
S2SMOD: 串口2的波特率加倍控制位。
0,串口2的波特率不加倍;
l,串口2的波特率加倍
对于STC12C5A60S2系列单片机,串口2只能使用独立波特率发生器作为波特率发生器,不能够选择定时器1作为波特率发生器; 而串口1既可以选择定时器1作为波特率发生器,也可以选择独立波特率发生器作为波特率发生器。
BRTX12: 独立波特率发生器计数控制位。
0,独立波特率发生器每12个时钟计数一次;
1,独立波特率发生器每1个时钟计数一次
EXTRAM:
0,允许使用内部扩展的1024字节扩展RAM
1,禁止使用内部扩展的1024字节扩展RAM
S1BRS: 串行口波特率发生器选择位。
0,缺省,串行口波特率发生器选择定时器1,S1BRS是串口1波特率发生器选择位;
I,独立波特率发生器作为串行口的波特率发生器,此时定时器1得到释放,可以作为独
立定时器使用
串口1可以选择定时器1做波特率发生器,也可以选择独立波特率发生器作为波特率发生器。当设置AUXR寄存器中的S1BRS位(串行口波特率选择位)为1时,串行口选择独立波特率发生器作为波特率发生器,此时定时器1可以释放出来作为定时器/计数器/时钟输出使用.
评论
查看更多