求助:15W4K48S串口3与串口2不能同时使用
我的程序用了串口1和2,串口1接的是485外设,串口2接触摸屏显示数据,程序已经调试通过没问题。现在加了一个串口3,希望与上位机通信,现在单片机通过串口3向上位机发送数据没问题,
但是当上位机向串口3发送数据时串口2数据就不正常了,出现乱码。
曾怀疑是自己程序错误,我用同样的程序改用串口4来做,就一切正常,
请问哪位大神可以帮忙解答一下
{:4_196:}
不知道怎样上传代码 附件 传工程的压缩包
这有个 32位 AI8051U 的程序,拿去修改下:
#include <AI8051U.H> //包含AI8051U的头文件
// 改成需要的头文件
#include "intrins.h" //使用_nop_()函数所必须要包含的头文件,
//否则延时函数中调用的_nop_()函数没有被头文件引用过来,
//会导致编译器找不到这个而函数而报错。
unsigned char uart1_txflag = 0; //定义1个位变量,UART1事件位变量标志,记录UART1已产生发送中断
// 供主循环查询UART1是否已产生发送中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart1_rxflag = 0; //定义1个位变量,UART1事件位变量标志,记录UART1已产生接收中断
// 供主循环查询UART1是否已产生接收中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart2_txflag = 0; //定义1个位变量,UART2事件位变量标志,记录UART2已产生发送中断
// 供主循环查询UART2是否已产生发送中断,在主循环中处理UART2的中断事件任务,不堵塞其他中断
unsigned char uart2_rxflag = 0; //定义1个位变量,UART2事件位变量标志,记录UART2已产生接收中断
// 供主循环查询UART2是否已产生接收中断,在主循环中处理UART2的中断事件任务,不堵塞其他中断
unsigned char uart3_txflag = 0; //定义1个位变量,UART3事件位变量标志,记录UART3已产生发送中断
// 供主循环查询UART3是否已产生发送中断,在主循环中处理UART3的中断事件任务,不堵塞其他中断
unsigned char uart3_rxflag = 0; //定义1个位变量,UART3事件位变量标志,记录UART3已产生接收中断
// 供主循环查询UART3是否已产生接收中断,在主循环中处理UART3的中断事件任务,不堵塞其他中断
unsigned char uart4_txflag = 0; //定义1个位变量,UART4事件位变量标志,记录UART4已产生发送中断
// 供主循环查询UART4是否已产生发送中断,在主循环中处理UART1的中断事件任务,不堵塞其他中断
unsigned char uart4_rxflag = 0; //定义1个位变量,UART4事件位变量标志,记录UART4已产生接收中断
// 供主循环查询UART4是否已产生接收中断,在主循环中处理UART4的中断事件任务,不堵塞其他中断
void Uart1_Init(void) //115200bps@40.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xA9; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES = 1; //使能串口1中断
}
void Uart2_Init(void) //115200bps@40.000MHz
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xA9; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x01; //使能串口2中断
}
void Uart3_Init(void) //115200bps@40.000MHz
{
S3CON = 0x10; //8位数据,可变波特率
S3CON |= 0x40; //串口3选择定时器3为波特率发生器
T4T3M |= 0x02; //定时器时钟1T模式
T3L = 0xA9; //设置定时初始值
T3H = 0xFF; //设置定时初始值
T4T3M |= 0x08; //定时器3开始计时
IE2 |= 0x08; //使能串口3中断
}
void Uart4_Init(void) //115200bps@40.000MHz
{
S4CON = 0x10; //8位数据,可变波特率
S4CON |= 0x40; //串口4选择定时器4为波特率发生器
T4T3M |= 0x20; //定时器时钟1T模式
T4L = 0xA9; //设置定时初始值
T4H = 0xFF; //设置定时初始值
T4T3M |= 0x80; //定时器4开始计时
IE2 |= 0x10; //使能串口4中断
}
void main (void)
{
//EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//WTST = 0; //设置取程序代码等待时间,赋值为0表示不等待,程序以最快速度运行
//CKCON = 0; //设置访问片内的xdata速度,赋值为0表示用最快速度访问,不增加额外的等待时间
// STC15W4K32S4系列,上面3句 不适用
// 加上下面这句
P_SW2 |= 0x80; //使能XFR访问
P0M0 = 0x00; P0M1 = 0x00; //设置 P0 口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //设置 P1 口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //设置 P2 口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //设置 P3 口为准双向口模式
P3M0 = 0x00; P3M1 = 0x0c; //P32、P33设置为高阻输入(需要同步开启上拉电阻)
P4M0 = 0x00; P4M1 = 0x00; //设置 P4 口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //设置 P5 口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //设置 P6 口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //设置 P7 口为准双向口模式
uart1_txflag = 0; //初始化用户标志位
uart1_rxflag = 0; //初始化用户标志位
uart2_txflag = 0; //初始化用户标志位
uart2_rxflag = 0; //初始化用户标志位
uart3_txflag = 0; //初始化用户标志位
uart3_rxflag = 0; //初始化用户标志位
uart4_txflag = 0; //初始化用户标志位
uart4_rxflag = 0; //初始化用户标志位
Uart1_Init(); //调用UART1初始化函数
Uart2_Init(); //调用UART2初始化函数
Uart3_Init(); //调用UART3初始化函数
Uart4_Init(); //调用UART4初始化函数
EA = 1; //总中断允许位打开
P40 = 0; //打开LED灯供电
while(1) //主循环中查询需要处理的各种事件
{
/*本演示程序中,主循环查询各中断有无需要继续处理的事件的次序,
依次是 UART/UART2/UART3/UART4, 用户可以自己根据实际情况,
调整查询各中断有无需要继续处理的事件的优先次序*/
if(uart1_txflag) //主循环中查询,UART1是否已产生发送中断,是否有需要处理的UART1发送事件
{
uart1_txflag = 0; //清0,UART1发送事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart1_rxflag) //主循环中查询,UART1是否已产生接收中断,是否有需要处理的UART1接收事件
{
uart1_rxflag = 0; //清0,UART1接收事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart2_txflag) //主循环中查询,UART2是否已产生发送中断,是否有需要处理的UART2发送事件
{
uart2_txflag = 0; //清0,UART2发送事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart2_rxflag) //主循环中查询,UART2是否已产生接收中断,是否有需要处理的UART2接收事件
{
uart2_rxflag = 0; //清0,UART2接收事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart3_txflag) //主循环中查询,UART3是否已产生发送中断,是否有需要处理的UART3发送事件
{
uart3_txflag = 0; //清0,UART3发送事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart3_rxflag) //主循环中查询,UART3是否已产生接收中断,是否有需要处理的UART3接收事件
{
uart3_rxflag = 0; //清0,UART3接收事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart4_txflag) //主循环中查询,UART4是否已产生发送中断,是否有需要处理的UART4发送事件
{
uart4_txflag = 0; //清0,UART4发送事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
if(uart4_rxflag) //主循环中查询,UART4是否已产生接收中断,是否有需要处理的UART4接收事件
{
uart4_rxflag = 0; //清0,UART4接收事件位变量标志
_nop_(); //用户在此添加需要处理的事件
_nop_();
}
}
}
void Uart1_Isr(void) interrupt UART1_VECTOR
{
if (TI) //检测串口1发送中断
{
TI = 0; //清除串口1发送中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart1_txflag = 1; // uart1_txflag置1是通知主循环处理部分串口1发送中断事件不需要特急处理的任务
//置1,记录UART1已产生发送中断,供主循环查询判断有无需处理的UART1发送任务
}
if (RI) //检测串口1接收中断
{
RI = 0; //清除串口1接收中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart1_rxflag = 1; // uart1_rxflag置1是通知主循环处理部分串口1接收中断事件不需要特急处理的任务
//置1,记录UART1已产生接收中断,供主循环查询判断有无需处理的UART1接收任务
}
}
//UART1中断服务程序,UART1_VECTOR在AI8051U.H头文件中已宏定义为4
void Uart2_Isr(void) interrupt UART2_VECTOR
{
if (S2CON & 0x02) //检测串口2发送中断
{
S2CON &= ~0x02; //清除串口2发送中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart2_txflag = 1; // uart2_txflag置1是通知主循环处理部分串口2发送中断事件不需要特急处理的任务
//置1,记录UART2已产生发送中断,供主循环查询判断有无需处理的UART2发送任务
}
if (S2CON & 0x01) //检测串口2接收中断
{
S2CON &= ~0x01; //清除串口2接收中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart2_rxflag = 1; // uart2_rxflag置1是通知主循环处理部分串口2接收中断事件不需要特急处理的任务
//置1,记录UART2已产生接收中断,供主循环查询判断有无需处理的UART2接收任务
}
}
//UART2中断服务程序,UART2_VECTOR在AI8051U.H头文件中已宏定义为8
void Uart3_Isr(void) interrupt UART3_VECTOR
{
if (S3CON & 0x02) //检测串口3发送中断
{
S3CON &= ~0x02; //清除串口3发送中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart3_txflag = 1; // uart3_txflag置1是通知主循环处理部分串口3发送中断事件不需要特急处理的任务
//置1,记录UART3已产生发送中断,供主循环查询判断有无需处理的UART3发送任务
}
if (S3CON & 0x01) //检测串口3接收中断
{
S3CON &= ~0x01; //清除串口3接收中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart3_rxflag = 1; // uart3_rxflag置1是通知主循环处理部分串口3接收中断事件不需要特急处理的任务
//置1,记录UART3已产生接收中断,供主循环查询判断有无需处理的UART3接收任务
}
}
//UART3中断服务程序,UART3_VECTOR在AI8051U.H头文件中已宏定义为17
void Uart4_Isr(void) interrupt UART4_VECTOR
{
if (S4CON & 0x02) //检测串口4发送中断
{
S4CON &= ~0x02; //清除串口4发送中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart4_txflag = 1; // uart4_txflag置1是通知主循环处理部分串口4发送中断事件不需要特急处理的任务
//置1,记录UART4已产生发送中断,供主循环查询判断有无需处理的UART4发送任务
}
if (S4CON & 0x01) //检测串口4接收中断
{
S4CON &= ~0x01; //清除串口4接收中断请求位
_nop_(); //特急处理
//以上程序代表部分需特急处理的中断事件,可在中断服务程序中直接处理
//但时间不要太长,否则会影响其他中断事件的实时响应速度
uart4_rxflag = 1; // uart4_rxflag置1是通知主循环处理部分串口4接收中断事件不需要特急处理的任务
//置1,记录UART4已产生接收中断,供主循环查询判断有无需处理的UART4接收任务
}
}
//UART4中断服务程序,UART4_VECTOR在AI8051U.H头文件中已宏定义为18
void main (void)
{
//EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//WTST = 0; //设置取程序代码等待时间,赋值为0表示不等待,程序以最快速度运行
//CKCON = 0; //设置访问片内的xdata速度,赋值为0表示用最快速度访问,不增加额外的等待时间
// STC15W4K32S4系列,上面3句 不适用
// 加上下面这句
P_SW2 |= 0x80; //使能XFR访问
P_SW2 |= 0x80; //使能XFR访问
STC15W4K32三系列,您将程序改成 30MHz 以下跑比较合理
https://www.stcaimcu.com/data/download/Datasheet/STC15-CN.pdf
最新数据手册
#ifndef __STC15_H__
#define __STC15_H__
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
#include "stdio.h"
#include "intrins.h"
/////////////////////////////////////////////////
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr AUXR = 0x8E;
sfr INT_CLKO = 0x8F;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr CLK_DIV = 0x97;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9A;
sfr S2BUF = 0x9B;
sfr P1ASF = 0x9D;
sfr P2 = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr BUS_SPEED = 0xA1;
sfr AUXR1 = 0xA2;
sfr P_SW1 = 0xA2;
sfr IE = 0xA8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xA9;
sfr WKTCL = 0xAA;
sfr WKTCH = 0xAB;
sfr S3CON = 0xAC;
sfr S3BUF = 0xAD;
sfr IE2 = 0xAF;
sfr P3 = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr IP2 = 0xB5;
sfr IP = 0xB8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xB9;
sfr P_SW2 = 0xBA;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_RESL = 0xBE;
sfr P4 = 0xC0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xC1;
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
sfr P5 = 0xC8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr SPSTAT = 0xCD;
sfr SPCTL = 0xCE;
sfr SPDAT = 0xCF;
sfr PSW = 0xD0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr T4T3M = 0xD1;
sfr T4H = 0xD2;
sfr T4L = 0xD3;
sfr T3H = 0xD4;
sfr T3L = 0xD5;
sfr T2H = 0xD6;
sfr T2L = 0xD7;
sfr T3T4M = 0xD1;
sfr TH4 = 0xD2;
sfr TL4 = 0xD3;
sfr TH3 = 0xD4;
sfr TL3 = 0xD5;
sfr TH2 = 0xD6;
sfr TL2 = 0xD7;
sfr CCON = 0xD8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr ACC = 0xE0;
sbit ACC0 = ACC^0;
sbit ACC1 = ACC^1;
sbit ACC2 = ACC^2;
sbit ACC3 = ACC^3;
sbit ACC4 = ACC^4;
sbit ACC5 = ACC^5;
sbit ACC6 = ACC^6;
sbit ACC7 = ACC^7;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr CMPCR1 = 0xE6;
sfr CMPCR2 = 0xE7;
sfr P6 = 0xE8;
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sfr CL = 0xE9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;
sfr CCAP2L = 0xEC;
sfr B = 0xF0;
sbit B0 = B^0;
sbit B1 = B^1;
sbit B2 = B^2;
sbit B3 = B^3;
sbit B4 = B^4;
sbit B5 = B^5;
sbit B6 = B^6;
sbit B7 = B^7;
sfr PWMCFG = 0xF1;
sfr PCA_PWM0 = 0xF2;
sfr PCA_PWM1 = 0xF3;
sfr PCA_PWM2 = 0xF4;
sfr PWMCR = 0xF5;
sfr PWMIF = 0xF6;
sfr PWMFDCR = 0xF7;
sfr P7 = 0xF8;
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
sfr CH = 0xF9;
sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;
sfr CCAP2H = 0xFC;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC (*(unsigned intvolatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define PWM2T1 (*(unsigned intvolatile xdata *)0xff00)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM2T2 (*(unsigned intvolatile xdata *)0xff02)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM2CR (*(unsigned char volatile xdata *)0xff04)
#define PWM3T1 (*(unsigned intvolatile xdata *)0xff10)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM3T2 (*(unsigned intvolatile xdata *)0xff12)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM3CR (*(unsigned char volatile xdata *)0xff14)
#define PWM4T1 (*(unsigned intvolatile xdata *)0xff20)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM4T2 (*(unsigned intvolatile xdata *)0xff22)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM4CR (*(unsigned char volatile xdata *)0xff24)
#define PWM5T1 (*(unsigned intvolatile xdata *)0xff30)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM5T2 (*(unsigned intvolatile xdata *)0xff32)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM5CR (*(unsigned char volatile xdata *)0xff34)
#define PWM6T1 (*(unsigned intvolatile xdata *)0xff40)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM6T2 (*(unsigned intvolatile xdata *)0xff42)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM6CR (*(unsigned char volatile xdata *)0xff44)
#define PWM7T1 (*(unsigned intvolatile xdata *)0xff50)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM7T2 (*(unsigned intvolatile xdata *)0xff52)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM7CR (*(unsigned char volatile xdata *)0xff54)
/////////////////////////////////////////////////
#endif
页:
[1]
2