单片机/MCUwilliam hill官网
登录
直播中
DF_wei
7年用户
25经验值
擅长:嵌入式技术 模拟技术 处理器/DSP 接口/总线/驱动 控制/MCU
私信
关注
[问答]
请大神帮我看下我的程序错在哪里,串口通信给个指令测试RAM
开启该帖子的消息推送
串口调试
单片机
本帖最后由 昨日的惆怅 于 2017-9-21 09:54 编辑
#include
#include
//头文件 调用_Nop_()函数
#include
//访问绝对地址的头文件
#define uchar unsigned char // unsigned char 宏定义为 uchar unsigned char 就是0~255
#define uint unsigned int // 定义uint为无符号整型。无符号整型就是说内存中表示这个数的二进制串没有符号位,也就是没有负数。
#define _Nop_() _nop_() //定义空指令
#define ushort unsigned short
bit RAMERR;
uchar RAMDATA,dat2,dat3;
uint RAMADDR,RAMdat2;
uchar flag, OK,ZZZ,NO,i,Dat;
void InitUART(void)
{
TMOD = 0x20; //将
ti
mer1设置为Mode2以产生波特率
SCON = 0xd0; //串口工作方式3,串口工作方式2有固定的波特率
TH1 = 0xfd; //波特率9600
TL1 = TH1;
PCON = 0x00; //将SMOD设置为0
TR1 = 1; //开启定时器1
EA=1; //开启总中断
ES=1; //开启串口中断
}
void SendData(uchar Dat) //发送数据
{
ACC = Dat;
CY=P;
TB8=~CY ;
SBUF=ACC;
while(!TI);
TI = 0; //软件复位
}
void my_int1(void) interrupt 4 //串口中断服务程序
{
RI=0;
ZZZ=SBUF;
//将SBUF中的数据读走给c, 这是此中断服务程序最重要的目的
flag = 1; //将标志位flag置1, 以方便在主程序中查询判断是否已经收到数据
}
void sendstring(uchar *p) //送字符串
{
while(*p)
{
SendData(*p);
p++;
}
}
void delay1ms(int x) //1ms延时
{ int i,j; //声明整型变量i;j
for(i=0;i
for(j=0;j<120;j++); //计数120次,延迟1ms
} //延时函数结束
void RAMwrite(uchar dat)
{
for(RAMADDR=0x0000;RAMADDR<0x8000;RAMADDR++) //15根地址线(0000 0000 0000 0000~1000 0000 0000 0000)
{
XBYTE[RAMADDR]=dat; //此地址对应一个字节,把数据(dat)写入地址(RAMADDR)即把数据写入62256如
// XBYTE [0x4000] = 57;这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。
_nop_();
_nop_();
_nop_();
}
}
void RAMread(uchar dat)
{
for(RAMADDR=0x0000;RAMADDR<0x8000;RAMADDR++) //62256末地址 0X8000
{
RAMDATA = XBYTE[RAMADDR]; //从62256读出数据
_nop_();
_nop_();
_nop_();
if(RAMDATA==dat) //比较数据
{
sendstring("RAMdat is OK.");
}
else
{
SendData(RAMADDR);
}
_nop_();
_nop_();
}
}
void RAMaddr_bus_check(void)
{
uchar k;
uchar datt1;
uchar datt2;
// uchar ZZZ;
uint RAMaddr=1;
XBYTE[0x0000]=0xff; //写数据 CCC==0XFF
delay1ms(1);
for(k=0;k<15;k++)
{
XBYTE[RAMaddr<
delay1ms(1);
datt1=XBYTE[RAMaddr<
datt2=XBYTE[0x0000]; //datt2==0xff
if(datt1==k&&datt1!=datt2) //datt1==k是测试ram地址总线是否读写数据一致,是否粘连 (一致,没有粘连,datt1等于K)
// for(k=1;k<16;k++) //datt1!=datt2是测试ram地址总线是否断路 (datt1等于datt2,断路)
// {
// XBYTE[RAMaddr<
// delay1ms(1);
// datt1=XBYTE[RAMaddr<
// datt2=XBYTE[RAMaddr<<(k-1)];
// if(datt1!=datt2)
{
RAMERR=0;
}
else
{
RAMERR=1;
}
if(RAMERR==0)
{
sendstring("RAMaddr bus is OK.");
_nop_();
}
if(RAMERR==1)
{
sendstring("RAMaddr bus is no.");
// SendData(RAMaddr);
}
}
}
void RAMdata_bus_check(void)
{
uchar datt1,datt2,A;
for(A=0;A<8;A++)
{
XBYTE[0x0000] = 0x00 ; //写数据 ZZZ==0X00
delay1ms(1 ) ;
datt1 = XBYTE[0x0000] ;
delay1ms(1 ) ;
if((datt1 & (0x01<
{
XBYTE[0x0000] = (0x01<
delay1ms(1 ) ;
datt2 = XBYTE[0x0000] ;
delay1ms(1 ) ;
if(datt2 & (0x01<
{
RAMERR=0;
}
else
{
RAMERR=1;
}
}
}
if(RAMERR==0)
{
sendstring("RAMdata bus is OK.");
delay1ms(200); //LED2,LED3,LED4,LED5,LED6, 全亮 ,延迟5s
}
if(RAMERR==1)
{
SendData(A);
delay1ms(200); //LED2,LED3,LED4,LED5,LED6, 全灭 ,延迟5s
}
}
void main(void) //主程序
{
InitUART(); //端口初始化
AUXR = 0x02;
while(1)
{
if(flag==1) //若检测到flag为1, 说明程序已经执行过串口中断服务程序, 即收到了数据.
{
flag=0; //如果写入成功,标志位flag就变为0
ES=0;
// SendData(ZZZ);
delay1ms(500);
if(ZZZ==0xaa)
{
RAMwrite(0xaa);
delay1ms(500);
RAMread(0xaa);
}
if(ZZZ==0xff)
{
RAMaddr_bus_check(); //RAM地址总线检测是否有断线、粘线。
delay1ms(500);
}
if(ZZZ==0x00)
{
RAMdata_bus_check(); //RAM数据总线检测是否有断路、粘线。
delay1ms(500);
}
// if(RAMDATA==CCC) //比较数据
// {
//
// sendstring("RAMaddress is OK.");
//
// }
// else
// {
// SendData(RAMADDR);
// }
// _nop_();
// _nop_();
//
// delay1ms(1000);
}
ES=1; //重新开启串口中断
}
}
已退回
2
积分
回帖
(1)
DF_wei
2017-9-21 09:22:05
我短接了RAM地址线的其中两根,程序中给个指令ff,测试RAM的地址总线,单片机应该回个RAMaddr bus is no.给调试助手的,然而单片机给的却是RAMaddr bus is OK.,请路过的大神帮忙分析下
我短接了RAM地址线的其中两根,程序中给个指令ff,测试RAM的地址总线,单片机应该回个RAMaddr bus is no.给调试助手的,然而单片机给的却是RAMaddr bus is OK.,请路过的大神帮忙分析下
举报
更多回帖
rotate(-90deg);
回复
相关问答
串口调试
单片机
labview
串口
通信
问题
2012-12-02
3267
请问PIC16F1516单片机怎么和
串口
屏互相数据传送?
2020-06-06
1975
求助,请问
程序
错
在哪里
?
2015-06-02
3325
大神
们
帮我
看看这段
程序
问题
在哪里
?
2020-08-02
719
温度采集仿真
2017-04-08
3119
求助,先说谢谢了,
我
的模拟威廉希尔官方网站 为啥就是不行
2013-05-09
2331
如何在labview的VISA
串口
通信
模块中发送多条
通信
指令
?
2018-03-30
7778
fluke示波器与LabVIEW
串口
通信
问题
2016-06-21
4766
proteus8.0仿真实验出现以下问题,求
大神
告知
错
在哪里
?
2015-01-06
3803
关于labview与stm32
串口
通信
的问题
2018-05-14
14101
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分