论坛风格切换切换到宽版
  • 5483阅读
  • 22回复

原来单片机程序还可以这样写 [复制链接]

上一主题 下一主题
离线bd5it
 
发帖
2355
只看楼主 倒序阅读 0楼 发表于: 2004-04-16
仅以一条代码来揭示程序飞跑的本质!
750102h ;mov 01h,#02h

如当前pc不是指向75h,而是指向01h或02h,那么51内的指令译码器将把她们忠实地翻译成ajmp xx01h 或 ljmp xxxxh 而xx01h xxxxh又是什么呢?天知道!这样恶性飞跑下去那还不死定!
改革一下:
clr a ;0c4h
inc a ;04h
mov r1,a ;0f9h
inc a ;04h
mov @r1,a ;86h

每一字节代码都不能在生成跳转和循环,且都是单字节指令!往那跑去?
跑出去了都要自己回来!“在家”千日好!“跳出”事事难嘛!这样只要平时习惯了用累加器和寄存器把数倒一倒,把那些危险代码都给倒掉,这样虽说给pc的“足”上多加了两字节的“包”可它不好“跑”啊!“足包”====跑!

有朋友会问:要是pc抓做02h--ljmp 又有抓做了老鼻子远的xxh,再抓做隔壁的yyh不就没用了吗? pc那一位最活跃啊?pc0啊!要“扯拐”显然发生在她身上,至于那pc15同志啊,睡得更死猪一样,雷爆(强干扰)来了都打不醒?此外如果干扰都强到了pc高位都出错的地步!关电!关电!不干了!“不是我们不行而是敌人太强大”!反过来要是敌人在你的专政下,只是偶尔出来捣捣乱,但一出来就冲到屁西(pc)高层,就要问问是不是你的王国根基(硬件)有问题了?

而非出在意识形态(软件)上!硬件为本!软件为标!标本兼治铸就坚强体魄,方能百毒不侵!

摘自http://www.mcu51.com


能否这样理解:(两个凡是)
凡是程序里出现了01h的地方都要改成单字节指令,凡是程序里出现了02h的地方都要改成单字节指令!
离线bg2ada
发帖
430
只看该作者 1楼 发表于: 2004-04-16
好,顶起来,购10个字吗
离线bg4jj
发帖
5094
只看该作者 2楼 发表于: 2004-04-18
很有些道理呀
精雕细琢的结果
离线BD4VNF
发帖
1208
只看该作者 3楼 发表于: 2004-04-18
如当前pc不是指向75h,为何?
离线wapman
发帖
546
只看该作者 4楼 发表于: 2004-04-20
'
如当前pc不是指向75h,为何?
'

因为在这个时候来了干扰,所以够了吧?

真是好帖.软件抗干扰啊!
离线bv2ac
发帖
14169
只看该作者 5楼 发表于: 2004-04-20
为何一定干扰 pc0, 干扰 a0 也可以吗, 这里 a 有五次被干扰的机会...

clr a ;0c4h
inc a ;04h
mov r1,a ;0f9h
inc a ;04h
mov @r1,a ;86h
离线BG9DW
发帖
4574
只看该作者 6楼 发表于: 2004-04-23
对我来说还是有一点深啊,看的不是很透彻.郁闷.
离线ncradio
发帖
11345
只看该作者 7楼 发表于: 2004-04-23
嘿嘿单片机这东西真的有点鬼啊!那天实验的时候一写就是N多行,写出来什么都通过了!包括单步执行也很正常的PASS,可是就是一旦连续执行就什么反映也没了啊!郁闷!老师也不知道为什么,说这程序是对的,只好让我们又重新换了一种写法一切OK!郁闷!·
离线雨夜听香
发帖
566
只看该作者 8楼 发表于: 2004-05-15
这也是一种经验呀!!!!!!!!
离线bg3fh
发帖
225
只看该作者 9楼 发表于: 2004-05-15
"嘿嘿单片机这东西真的有点鬼啊!那天实验的时候一写就是N多行,写出来什么都通过了!包括单步执行也很正常的PASS,可是就是一旦连续执行就什么反映也没了啊!郁闷!老师也不知道为什么,说这程序是对的,只好让我们又重新换了一种写法一切OK!郁闷!·"

压站地址出了你预计的范围,破坏了你的数据.这种可能最大!!!!!!!
离线BD7IAV
发帖
6229
只看该作者 10楼 发表于: 2004-05-23
大概10年前念书时,和同学做东西玩,由于第一次搞这种比较复杂的东西,所有我们先专门写了的许多单项功能调测程序,有个程序也是单步执行正常,连续执行不行。后来发现,某外设(8870dtmf解码)加电后进入正常状态也就是复位比单片机慢,所以单片机要等他一会,呵呵。
不知到你的是啥东东?
离线bd5it
发帖
2355
只看该作者 11楼 发表于: 2004-05-24
'
...后来发现,某外设(8870dtmf解码)加电后进入正常状态也就是复位比单片机慢,所以单片机要等他一会...
'


不用8870dtmf解码,直接用51来解,做过吗?我一直在找这个东东 :confused:
离线雨夜听香
发帖
566
只看该作者 12楼 发表于: 2004-05-24
是要51解dtmf的程序吗???
离线bd5it
发帖
2355
只看该作者 13楼 发表于: 2004-05-24
[quote=雨夜听香]是要51解dtmf的程序吗???[/quote]


对的,想用51纯软件解码,无需外挂dtmf解码ic。您做过吗?也许有朋友会不解,便宜的dtmf解码ic一片才1块多钱,有必要吗。我觉得还是有此必要的,如果一个产品产量上了几万,光省8870也要省到十几万元。 :)
离线BD7IAV
发帖
6229
只看该作者 14楼 发表于: 2004-05-26
没做过。觉得繁,无ad.
dtmf模拟信号电平低,至少要放大,滤波,才能被51识别计数,根据整形后脉冲间隔及总数计算也许可以。
离线BD7IAV
发帖
6229
只看该作者 15楼 发表于: 2004-05-26
即和通过rs232用运放处理的接口来收sstv一样。叫啥hamcom的
离线bg3hb
发帖
298
只看该作者 16楼 发表于: 2004-05-31
多搞一些nop,对跑飞有些用处。不要怕浪费几个存储器。
离线oxalis
发帖
958
只看该作者 17楼 发表于: 2004-05-31
用带watchdog的单片机好了。
发帖
97
只看该作者 18楼 发表于: 2004-06-06
我认为一般的单片机芯片,无法替代8870dtmf解码芯片,这是硬件电路确定的,8870dtmf解码芯片内部设计了特定频率群的数字滤波器,具有很好的抗干扰能力,单片机芯片望尘莫及!大家认为如何,我们要避免走弯路呀!
离线bd5it
发帖
2355
只看该作者 19楼 发表于: 2004-06-07
我已经知道的有 pic16c57可以做到纯软件解dtmf码,既然pic16c57都可以,那么at89c2051也肯定可以!继续探讨...