共2条
1/1 1 跳转至页
uchar,bdata,nbsp,nbsp,out,data 看看程序错在那里,编译提示uchar bdata out_data;丢失分号
问
#include <reg51.h>
#include <intrins.h>
sbit DOUT=P0^4;
sbit DIN=P0^3;
sbit SCLK=P0^5;
sbit CS=P0^6;
uchar bdata out_data; /*定义变量out_data位于可位寻址区*/
sbit DIN_DATA=out_data^7;
sbit DOUT_DATA=out_data^0;
void no_send(void) /*禁止计算机发送数据*/
{
utlk(0x84,0x00); /*RTS为低时,禁止计算机发送数据*/
}
/*发送TX1,TX2中的16位数到max3100的DIN端,同时接收max3100的DOUT端数据送RX1,RX2*/
void uchar utlk(uchar tx1,uchar tx2)
{
uchar rx2=0;
CS=0; /*选中3100*/
byt8(tx1); /*发送并接收高8位*/
rx2=byt8(tx2); /*发送并接收低8位*/
CS=1; /*禁止3100*/
return rx2; /*取回收到的数据*/
}
/*从DIN端移位输出8位据,并从DOUT端接收8位数据*/
void uchar byt8(uchar x)
{
uchar i; /*8位传送,循环8次*/
out_data=x; /*把X的值放入可位寻址的变量out_data中*/
DOUT=1; /*确保cpu能从DOUT接收*/
for(i=0;i<8;i++)
{
DIN=DIN_DATA;
SCLK=1; /*时钟端SCLK上跳沿*/
out_data=out_data<<1;
DOUT_DATA=DOUT; /*时钟正跳变后读取数据位*/
SCLK=0; /*时钟端SCLK下跳沿*/
}
x=out_data;
return x;
}
void let_send(void) /*允许计算机发送数据*/
{
utlk(0x86,0x00);/*TE为高电平时,只改变RTS的状态而不发数据*/
/*RTS为高时,允许计算机发送数据*/
}
void Init3100(void)
{
uchar dat,i=0;
do
{
let_Send(0xc4,0x0a); /*写配置字0xc40a, fifo使能,/IRO使能 ,9600bps */
Delayus(200); /*必须有延时*/
dat = Send3100(0x40,0x00); /*读配置字*/
}while((dat!= 0x0a)&&(++i<5)); /*不成功则配置5次,确保可靠配置,dat!=0x01(57.6kbps)是错误的*/
/*是测试时用的,能跑到576000*/
/*应该是0x0a(9600bps)*/
let_Send(0x84,0x55); //写数据,配置端口方等
Delayus(200); //必需有延时
}
void main(void)
{
Init3100();
while(1);
{
let_Send();
}
} 答 1: 你的uchar做过预定义么?因为没有这个数据类型,所以出错,改为:unsigned char bdata ...
或者在他之前添加:#define uchar unsigned char
#include <intrins.h>
sbit DOUT=P0^4;
sbit DIN=P0^3;
sbit SCLK=P0^5;
sbit CS=P0^6;
uchar bdata out_data; /*定义变量out_data位于可位寻址区*/
sbit DIN_DATA=out_data^7;
sbit DOUT_DATA=out_data^0;
void no_send(void) /*禁止计算机发送数据*/
{
utlk(0x84,0x00); /*RTS为低时,禁止计算机发送数据*/
}
/*发送TX1,TX2中的16位数到max3100的DIN端,同时接收max3100的DOUT端数据送RX1,RX2*/
void uchar utlk(uchar tx1,uchar tx2)
{
uchar rx2=0;
CS=0; /*选中3100*/
byt8(tx1); /*发送并接收高8位*/
rx2=byt8(tx2); /*发送并接收低8位*/
CS=1; /*禁止3100*/
return rx2; /*取回收到的数据*/
}
/*从DIN端移位输出8位据,并从DOUT端接收8位数据*/
void uchar byt8(uchar x)
{
uchar i; /*8位传送,循环8次*/
out_data=x; /*把X的值放入可位寻址的变量out_data中*/
DOUT=1; /*确保cpu能从DOUT接收*/
for(i=0;i<8;i++)
{
DIN=DIN_DATA;
SCLK=1; /*时钟端SCLK上跳沿*/
out_data=out_data<<1;
DOUT_DATA=DOUT; /*时钟正跳变后读取数据位*/
SCLK=0; /*时钟端SCLK下跳沿*/
}
x=out_data;
return x;
}
void let_send(void) /*允许计算机发送数据*/
{
utlk(0x86,0x00);/*TE为高电平时,只改变RTS的状态而不发数据*/
/*RTS为高时,允许计算机发送数据*/
}
void Init3100(void)
{
uchar dat,i=0;
do
{
let_Send(0xc4,0x0a); /*写配置字0xc40a, fifo使能,/IRO使能 ,9600bps */
Delayus(200); /*必须有延时*/
dat = Send3100(0x40,0x00); /*读配置字*/
}while((dat!= 0x0a)&&(++i<5)); /*不成功则配置5次,确保可靠配置,dat!=0x01(57.6kbps)是错误的*/
/*是测试时用的,能跑到576000*/
/*应该是0x0a(9600bps)*/
let_Send(0x84,0x55); //写数据,配置端口方等
Delayus(200); //必需有延时
}
void main(void)
{
Init3100();
while(1);
{
let_Send();
}
} 答 1: 你的uchar做过预定义么?因为没有这个数据类型,所以出错,改为:unsigned char bdata ...
或者在他之前添加:#define uchar unsigned char
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |