68 00 3B 00 02 D2 02 D2 02 CE 02 D2 02 D2 02 D2 02 D2 02 D2 43 43 ED F0 02 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 16 68 00 3B 00 02 D2 02 CE 02 D2 02 D2 02 D2 02 D2 02 CE 02 D2 43 43 ED F0 02 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 16
不知道是不是单片机的问题。抑或是电路的问题。 依然在不懈努力中,一定要解决问题。还剩一周多的时间,得抓紧了。
今天又研究了一下我的电路板,准备尝试下载程序,幻想着能下载成功。结果是出现了让人更失望的现象:单机连下载程序的指令都接收不到了。为什么呢? 经过不懈努力,排查重重可能的原因,发现,我用的插座触点松了,而且是p3.0的那个脚松了。那个纠结啊。好在今天我从公司隔爆开关的综合保护器电路板上找到了一个令人兴奋的芯片-stc90c58rd+。这又让我继续使用stc单片机的信心重新建立起来了。 换上stc90c58rd+测试一下程序下载,终于成功了,如下所示 Chinese:正在尝试与 MCU/单片机 握手连接 ... Chinese:连接失败,请尝试以下操作: 1.在单片机停电状态下,点下载按钮,再给单片机上电 2.停止下载,重新选择 RS-232 串口, 接好电缆 3.可能需要先将 P1.0/P1.1 短接到地 4.可能外部时钟未接 5.因 PLCC、PQFP 转换座引线过长而引起时钟不振荡,请 调整参数 6.可能要升级电脑端的 STC-ISP.exe 软件 7.若仍然不成功,可能 MCU/单片机内无 ISP 系统引导码, 或需退回升级,或 MCU 已损坏 8.若使用 USB 转 RS-232 串口线下载,可能会遇到不兼容 的问题,可以让我们帮助购买兼容的 USB 转 RS-232 串口线 仍在连接中, 请给 MCU 上电... MCU Type is: STC89LE58RD+ MCU Firmware Version: 4.3C Chinese:MCU 固件版本号: 4.3C Double speed / 双倍速: 12T/单倍速 振荡放大器增益: full gain 下次冷启动须 P1.0/P1.1=0/0 才下载, 快速启动 内部扩展AUX-RAM: 允许访问(强烈推荐) 下次下载用户应用程序时将数据Flash区擦除:YES 用户软件启动内部看门狗后: 复位关看门狗 ALE pin 仍为 ALE 内部时钟频率:11.053554M. 外部时钟频率:11.053554M. Chinese:正在重新连接 ... Current Baud is: / 当前波特率为: 2400 bps. We are erasing MCU flash... 正在擦除应用程序区... ( 00:03 ) 正在下载... ( 开始时间: 09:32:40 ) MCU Type is: STC89LE58RD+ MCU Firmware Version: 4.3C Chinese:MCU 固件版本号: 4.3C Double speed / 双倍速: 12T/单倍速 振荡放大器增益: full gain 下次下载时 P1.0/P1.1 与下载无关 内部扩展AUX-RAM: 允许访问(强烈推荐) 下次下载用户应用程序时将数据Flash区擦除: NO 用户软件启动内部看门狗后: 复位关看门狗 ALE pin 仍为 ALE 设置选项成功。 Program OK / 下载 OK Verify OK / 校验 OK erase times/擦除时间 : 00:03 program times/下载时间: 00:07 Encrypt OK/ 已加密
此时的下载速率为固定的速度,2400bps。
有图有真相:
main.c文件中的内容
#include <rtx51tny.h> //包含rtx51 tiny系统头文件,必须得有
#include <main.h>
unchar ledbuf;
//任务0,系统运行入口
//完成系统初始化
job0 () _task_ 0
{
os_create_task(1);
//os_create_task(2);
//os_send_signal(1); //启动任务1
while(1)
os_delete_task(0);
}
//单流水灯,从低位到高位
job1 () _task_ 1
{
ledbuf = 0x01;
while(1)
{
//os_wait1(SIG_EVENT);
led = ~ledbuf;
ledbuf <<= 1;
if(ledbuf == 0)
{
ledbuf = 1;
//os_send_signal(2);
//os_wait1(SIG_EVENT);
}
os_wait(K_TMO,25,0);
}
}
mian.h中的内容:
#include <reg52.h>
#define unchar unsigned char
#define unint unsigned int
//接口宏定义
#define led P1
流水灯程序的升级版本:实现左流水灯和右流水灯的切换。
切换时间由INT_CLOCK决定。
程序如下:
#include <rtx51tny.h> //包含rtx51 tiny系统头文件,必须得有
#include <main.h>
unchar ledbuf;
//任务0,系统运行入口
//完成系统初始化
job0 () _task_ 0
{
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
ledbuf = 0x01; //初始化变量
os_send_signal(1); //启动任务1
while(1)
os_delete_task(0); //初始化完毕,删除任务0
}
//单流水灯,从低位到高位
job1 () _task_ 1
{
while(1)
{
os_wait1(K_SIG); //等待信号
while(1)
{
led = ~ledbuf;
if(ledbuf == 0x80)
{
os_send_signal(2); //任务1运行结束,启动任务2
break;
}
ledbuf <<= 1;
os_wait(K_TMO,25,0); //等待25个时间节拍,在conf_tny.a51中修改时间节拍长度
}
}
}
//单流水灯,从高位到低位
job2 () _task_ 2
{
//ledbuf = 0x80;
while(1)
{
os_wait1(K_SIG); //等待信号
while(1)
{
led = ~ledbuf;
if(ledbuf == 1)
{
os_send_signal(1); //任务2运行结束,启动任务1
break;
}
ledbuf >>= 1;
os_wait(K_TMO,25,0); //等待时间节拍
}
}
}
效果视频:http://v.youku.com/v_show/id_XMzM3OTUzMjcy.html
前几天下载了一个mcuisp软件,如下图所示,可以自动识别单片机型号。由于前几次usbcom口没法成功更改为com1,点击下面的com1控件也老是弹出错误,所以很长时间没有去研究那个破单片机,改用了stc90cxx系列(从某个地方拆下来的)。
今天心血来潮,又研究了一下usb232改串口号,结果更改成功,并用mcuisp下载了一下程序,结果芯片有诈,stc12c5a32s2变成了stc89c52rc。我晕啊。怪不得用那个stc-isp下载不进去,芯片型号没选对,现在找到原因了,可以正常下载。
但是,我就是不明白,这是怎么回事。难道单片机会变质?
利用12864和ds1302显示时间,简单的程序。还是在rtx51下编的程序。程序内容如下。
#include <rtx51tny.h> //包含rtx51 tiny系统头文件,必须得有
#include "main.h"
#include "lcd12864.h"
#include "ds1302.h"
uchar getTimebuf[7];//用于存放获取的时间数据
uchar lcdTimeDisp[16]; //lcd时间显示
//任务0,系统运行入口
//完成系统初始化
job0 () _task_ 0
{
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
Init1302();//初始化DS1302
init_lcd();
os_send_signal(1); //启动任务1
while(1)
os_delete_task(0); //初始化完毕,删除任务0
}
//读取ds1302中的数据,存储到数组中,并格式化数据
job1 () _task_ 1
{
while(1)
{
v_Get1302(getTimebuf);//获取DS1302内7个时间日期数据存入数组getTimebuf[].
}
}
//lcd12864显示
job2 () _task_ 2
{
while(1)
{
writecommend(0x80);
writedata('2');
writedata('0');
writedata(getTimebuf[6]/16+0x30);
writedata(getTimebuf[6]%16+0x30);
writelcd("年");
writedata(getTimebuf[4]/16+0x30);
writedata(getTimebuf[4]%16+0x30);
writelcd("月");
writedata(getTimebuf[3]/16+0x30);
writedata(getTimebuf[3]%16+0x30);
writelcd("日");
writecommend(0x90);
writedata(getTimebuf[2]/16+0x30);
writedata(getTimebuf[2]%16+0x30);
writedata(':');
writedata(getTimebuf[1]/16+0x30);
writedata(getTimebuf[1]%16+0x30);
writedata(':');
writedata(getTimebuf[0]/16+0x30);
writedata(getTimebuf[0]%16+0x30);
writecommend(0x95);
writelcd("周");
switch(getTimebuf[5])
{
case 1:writelcd("一");
break;
case 2:writelcd("二");
break;
case 3:writelcd("三");
break;
case 4:writelcd("四");
break;
case 5:writelcd("五");
break;
case 6:writelcd("六");
break;
case 7:writelcd("七");
break;
}
}
}
lcd12864文件中的内容为:
#include"main.h"
#include"lcd12864.h"
uchar lcd;
void lcd_delay(uchar m)
{
uchar i,j;
for (i=m;i;i--)
for (j=150;j;j--);
}
//lcd 写数据
void writedata(uchar dat)
{
lcd_rs=1;
lcd_rw=0;
lcd_e=1;
lcd_data=dat;
lcd_delay(100);
lcd_e=0;
lcd=1;lcd=1;lcd=1;
}
//lcd 读数据
void writecommend(uchar commend)
{
lcd_rs=0;
lcd_rw=0;
lcd_e=1;
lcd_data=commend;
lcd_delay(100);
lcd_e=0;
lcd=1;lcd=1;lcd=1;
}
//lcd 写要显示的字符串
void writelcd(uchar *dat)
{
for(;*dat!='\0';dat++)
writedata(*dat);
}
//lcd 先写显示地址,后写要显示的字符串
void writelcdwords(uchar addr,uchar *words)
{
writecommend(addr);
for(;*words!='\0';words++)
writedata(*words);
}
//写指示符号
void writelcd_select(uchar addr,bit thf)
{
uchar i;
writecommend(addr);
if(thf) writedata(' ');
writedata(0x18);
writedata(0x18);
writecommend(0x90);
for(i=0;i<16;i++)
{
if(i==(addr&0x0f))
{
if(thf)
{
i++;
writecommend(addr+1);
writedata(0x18);
writedata(' ');
}
}
else
writelcdwords(0x90+i," ");
}
}
//初始化 lcd
void init_lcd()
{
lcd_delay(200);
lcd_delay(200);lcd_delay(200);lcd_delay(200);lcd_delay(200);lcd_delay(200);lcd_delay(200);
writecommend(FUN_MODE);
lcd_delay(200);
writecommend(FUN_MODE);
lcd_delay(200);
writecommend(DISPLAY_ON);
lcd_delay(200);
writecommend(CLEAR_SCREEN);
lcd_delay(800);
}
ds1302文件中的内容为:
/**************************/
/* ds1302实时时钟C程序 */
/**************************/
#include "main.h"
#include "ds1302.h"
//往DS1302写入1Byte数据
void v_WTInputByte(uchar ucDa)
{
uchar i;
ACC= ucDa;
for(i=8; i>0; i--)
{
T_IO = ACC0; //相当于汇编中的 RRC
T_CLK = 0;
T_CLK = 1; //上升沿
ACC =ACC>>1;
}
}
//从DS1302中读取1Byte数据
uchar uc_RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC>>1; //相当于汇编中的 RRC
T_CLK = 1; //高电平时ds1302输出数据
T_CLK = 0;//低电平时mcu读取数据
ACC7 = T_IO;
}
return(ACC);
}
//往DS1302先写入地址,后写入数据
void v_W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK =0;
T_RST = 1;
v_WTInputByte(ucAddr); /* 地址,命令 */
v_WTInputByte(ucDa); /* 写1Byte数据*/
T_RST =0;
}
//往DS1302先先写地址,后读数据
uchar uc_R1302(uchar ucAddr)
{
uchar ucDa;
T_RST = 0;
T_CLK =0;
T_RST = 1;
v_WTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
T_RST =0;
return(ucDa);
}
/*//设置初始时间
void v_Set1302(uchar *pSecDa)
{
uchar i;
uchar ucAddr = 0x80;
v_W1302(0x8e,0x00); // 控制命令,WP=0,允许写操作
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); //秒 分 时 日 月 星期 年
pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); // 控制命令,WP=1,写保护
}*/
// 读取DS1302当前时间
void v_Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);//格式为: 秒 分 时 日 月 星期 年
ucAddr += 2;
}
}
//初始化DS1302
void Init1302(void)
{
v_W1302(0x8e,0x00); //控制写入WP=0
//v_W1302(0x90,0xa5); //辅助电源充电命令
/*
v_W1302(0x80,0x00); //写秒
v_W1302(0x82,0x03); //写分
v_W1302(0x84,0x11); //写时
v_W1302(0x86,0x28); //写日
v_W1302(0x88,0x12); //写月
v_W1302(0x8a,0x03); //写星期
v_W1302(0x8c,0x11); //写年 09-5-7 10:59:00
*/
v_W1302(0x8e,0x80); //写保护WP=1
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏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分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |