-
89S52不怎么样,用其他的51吧...
-
哈哈~~~俺现在只喜欢CVI~~~
-
1.用的是C8051F060,采用充电电池供电。
2.当电池耗完之后,程序就丢失了,给电池充满电后就再也起不来了。
3.而正常供电的情形下,从来未见有程序丢失的现象。
1.充电电池不会也不应该过放电.
程序最好在过放电前进入休眠状态.
2."程序就丢失了"???
FLASH被擦除了???还是按复位键后才能继续正常工作???
来电后关中断后,再应该软件延时一段时间等待系统正常.(特别是有索相环电路)
3.这再次证明了电池供电系统不应该过放电.
-
该是初始化程序不好~~~
-
哈哈~~~讯通搞得鬼~~~
void TimeInit() using 0
{
TMOD = 0x21; //timer1 working mode 1
SCON = 0x58; //uart mode 1,ren==1
// PCON = 0x00;
PCON = 0x80;
/*----------------------------------
定时器0定时参数设置
----------------------------------*/
TL0 = 0;
TH0 = T0_5mS;
TR0 = 1;//启动定时器0
SystemBuffers.DisplayCount = 0;
/*----------------------------------
定时器1定时参数设置
----------------------------------*/
TL1 = 0xfd;
TH1 = 0xfd;
-
很经典的P89V58RD2串口反汇编程序注解及图示
;;;;串口中断服务子程序;;;;;;;;;;;;;;
L4E60:
PUSH PSW;保护现场
PUSH ACC
PUSH DPL
PUSH DPH
PUSH B
SETB RS1
CLR RS0;选择第1组寄存器组,这样可以不保护08H~0FH,R0~R7=08H~0FH
JNB TI,L4E8E;不是发送中断
;;;;串口发送中断服务子程序;;;;;;;;;;;
CLR TI;清除发送中断标志
;;;;串口发送中断空(R4=1为空)判断;;;;;;;;;;;
DJNZ R4,L4E78;发送缓冲区未满继续(最大256个字节)
LJMP L4E8E;发送缓冲区已满退出(估计要丢数据~~~应该做成滚筒式的)
L4E78:
MOV DPL,R0;当前发送缓冲区低8位地址
MOV DPH,R1;发送缓冲区高8位地址
MOVX A,@DPTR;从发送缓冲区中取出数据
INC DPTR;移动发送缓冲区指针
MOV SBUF,A;通过串口硬件模块发送数据
MOV R0,DPL;保存发送缓冲区低8位地址
MOV R1,DPH;保存发送缓冲区高8位地址
;;;;串口发送中断缓冲区越界判断;;;;;;;;;;;
MOV A,R1
CJNE A,#03FH,L4E8E;串口发送中断缓冲区未越界
;;;;越界处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#000H;发送缓冲区头低8位地址
MOV R1,#03EH;发送缓冲区头高8位地址(3E00H~3EFEH共255个字节缓冲区)
MOV R4,#001H;越界标志(发送缓冲区已满)
L4E8E:
JNB RI,L4EAA;不是接收中断
CLR RI;清除接收中断标志
MOV A,SBUF;通过串口硬件模块接收数据
MOV DPL,R2;当前接收缓冲区低8位地址
MOV DPH,R3;当前接收缓冲区高8位地址
MOV R7,#003H;设置接收中断软件标志,表示刚收到过数据
;;;;终止或特殊字符判断;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CJNE A,#07EH,L4E9F;不为终止或特殊字符7EH
INC R5;找到1个终止或特殊字符,记录次数
L4E9F:
MOVX @DPTR,A;保存到接收缓冲区
INC DPTR;移动接收缓冲区指针
LCALL S4EB5;DPH=3CH或3DH
CLR A;零标志表示已经存入数据???
MOVX @DPTR,A;????估计是软件握手之类或标志等
MOV R2,DPL;保存接收缓冲区低8位地址
MOV R3,DPH;保存接收缓冲区高8位地址
L4EAA:;总之该汇编串口接收发送中断服务程序写得非常不错,应该表扬~~~
POP B;恢复现场
POP DPH
POP DPL
POP ACC
POP PSW
RETI
;;;;DPH=3CH或3DH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S4EB5:
PUSH ACC
MOV A,DPH
ANL A,#001H
ORL A,#03CH
MOV DPH,A
POP ACC
RET
-
很经典的W77E58P串口反汇编程序注解及图示
;;;;串口中断服务子程序;;;;;;;;;;;;;;
L76B4:
PUSH PSW;保护现场
PUSH ACC
PUSH DPL
PUSH DPH
PUSH B
SETB RS1
CLR RS0;选择第1组寄存器组,这样可以不保护08H~0FH,R0~R7=08H~0FH
JNB TI,L76D9;不是发送中断
;;;;串口发送中断服务子程序;;;;;;;;;;;
CLR TI;清除发送中断标志
INC R1;移动发送缓冲区指针
;;;;串口发送中断越界判断;;;;;;;;;;;
MOV A,R0;发送缓冲区尾指针
MOV B,R1;当前发送缓冲区指针
CJNE A,B,L76D1;发送缓冲区未满继续
LJMP L76D9;发送缓冲区已满退出(估计要丢数据~~~应该做成滚筒式的)
L76D1:
MOV DPL,R1;当前发送缓冲区低8位地址
MOV DPH,#021H;发送缓冲区高8位固定地址
MOVX A,@DPTR;从发送缓冲区中取出数据
MOV SBUF,A;通过串口硬件模块发送数据
L76D9:
JNB RI,L76E9;不是接收中断
;;;;串口接收中断服务子程序;;;;;;;;;;;
CLR RI;清除接收中断标志
MOV R6,#002H;设置接收中断软件标志,表示刚收到过数据
MOV A,SBUF;通过串口硬件模块接收数据
MOV DPL,R2;当前接收缓冲区低8位地址
MOV DPH,#020H;接收缓冲区高8位固定地址(估计为256个字节,应该是滚筒式的)
MOVX @DPTR,A;保存到接收缓冲区
INC R2;移动接收缓冲区指针
L76E9:;总之该汇编串口接收发送中断服务程序写得非常不错,应该表扬~~~
POP B;恢复现场
POP DPH
POP DPL
POP ACC
POP PSW
RETI;中断返回
-
现在真的很庆幸自己当年退出PC软件的举动~~~
那是美国佬上门找事后明智的决定~~~
虽然俺现在很贫穷,但俺没"做梦带手铐"
-
DOS启动自动查杀大麻病毒,再用16个字节常住内存阻止病毒攻击硬盘主引导扇区,阻止对硬盘的格式化.
哈哈~~~那时攻击硬盘主引导扇区像玩一样~~~
后来不玩了,也不敢玩这些了~~~
那时用PCTOOLS和DEBUG真是"无所不能"...
直接写屏,鼠标程序都是自己编写,速度真快~~~
现在单位的foxprox还是用ucdos,自己编写的菜单制作程序,直接访问fox数据库.
现在还在用,比windows快多了~~~鼠标+键盘+菜单+数据库+并口+串口.
虽然系统也升级到xp了,但是DOS的优点还是很多的~~~
反汇编很锻炼人的反应能力,它时刻让你猜出作者的心思...
从中看出他的诡计和不足~~~
现在大家都害怕被人"盗版",俺认为被人盗是好事~~~
这说明你编的程序好~~~
如果被人反汇编了,并在无硬件或功能说明下被人猜到了,那就说明你自己的不足了~~~需要继续努力~~~
反汇编可以看出程序运行的效率,可以看出你程序框架的好坏,也能更好地找出
C语言不能察觉到的bug!!!
一般说C语言不用关心硬件,但反汇编后很容易分析出时序的出问题所在.
为什么好的调试环境都会有反汇编窗口呢???
道理不说自明~~~
-
虽然现在很少用汇编,并且几乎不用51系列了,但它给俺打下了MCU深厚的"水底"~~~
-
哈哈~~~灵活呀,有谁知道用户再提什么功能???
-
搞个单总线,8PIN的MCU
-
应该和595一样好用的串入并出,估计是时序问题
数据输入4094时候要使STB为0,8位输入完了使STB=1,然后再变为STB= 0
但最好:
数据输入4094时候要使STB为0,8位输入完了使STB=1,(延时几uS)然后再变为STB= 0
-
虚焊???
-
我一般+-1度,用10位AD, 0.05度估计高位ADC分辨率能做到,精度估计计量部门可以~~~
-
还选51还不如跨入ARMC8051Fx的ADC确实不错,带差分放大,这比ST好.
不过温度是测电压,所以让我选肯定是ARM或DSP~~~的世界~~~
-
选ST的ARM吧~~~你不跑OS裸奔也行.搞个最便宜的玩玩...
或用DS18b20之类的温度传感器也是不错的选择.
现在温度传感器器件很多~~~
-
估计很难~~~
-
要设置生成Hex文件的~~~不过忘了~~~