一个严重问题,3年后暴露才显露,恐怖

[复制链接]
4256|15
 楼主| 兰天白云 发表于 2007-4-27 20:13 | 显示全部楼层 |阅读模式
TE, pc, ov, FPC, RF
定义几个寄存器用于中断时保存W,STATUS,PCLATH<br />芯片是16F917<br />P_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6DH<br />W_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6EH<br />S_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6FH<br />以下是中断开头保护3个寄存器的程序,问题就出在这里<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;&nbsp;&nbsp;0004H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;W_TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保护W<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWAPF&nbsp;3,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保护STATUS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLRF&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;S_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;&nbsp;PCLATH,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保护PCH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;P_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLRF&nbsp;&nbsp;PCLATH&nbsp;<br /><br />大家看到了吗?<br />千万不要犯我这种错误哦!<br />
yewuyi 发表于 2007-4-28 08:41 | 显示全部楼层

为什么不把这三个地址定义到0X70~0X7F内?

呵呵,老兄,16F917总共推出来也没三年把?
lxrlxr 发表于 2007-4-28 20:10 | 显示全部楼层

不会吧,应该3年多了

  
ayi 发表于 2007-5-26 10:33 | 显示全部楼层

看不出有什么错误

请楼主指导一下
h_x_zhong 发表于 2007-5-28 22:57 | 显示全部楼层

看不问题,

芯片是16F917,有几级中断,我也没用过该芯片<br />
yewuyi 发表于 2007-5-29 08:34 | 显示全部楼层

我想兰天白云是想说那几个地址的问题

发生中断的时候那几个地址有可能不对号
与时俱进 发表于 2007-5-29 17:20 | 显示全部楼层

不是针对每一种芯片都有对应的例程吗?

那可是microchip为你写好的,为什么不用?
 楼主| 兰天白云 发表于 2007-6-2 08:27 | 显示全部楼层

有些时候会犯糊涂

  
li3 发表于 2007-6-6 11:58 | 显示全部楼层

没有看出来问题,故弄玄虚!!

;*****&nbsp;VARIABLE&nbsp;DEFINITIONS<br />w_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />status_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />pclath_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br /><br /><br /><br />;**********************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;processor&nbsp;reset&nbsp;vector<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;PCLATH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;ensure&nbsp;page&nbsp;bits&nbsp;are&nbsp;cleared<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;go&nbsp;to&nbsp;beginning&nbsp;of&nbsp;program<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;interrupt&nbsp;vector&nbsp;location<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;w_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;save&nbsp;off&nbsp;current&nbsp;W&nbsp;register&nbsp;contents<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;STATUS,w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;move&nbsp;status&nbsp;register&nbsp;into&nbsp;W&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;status_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;save&nbsp;off&nbsp;contents&nbsp;of&nbsp;STATUS&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;PCLATH,w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;move&nbsp;pclath&nbsp;register&nbsp;into&nbsp;w&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;pclath_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;save&nbsp;off&nbsp;contents&nbsp;of&nbsp;PCLATH&nbsp;register<br /><br />;&nbsp;isr&nbsp;code&nbsp;can&nbsp;go&nbsp;here&nbsp;or&nbsp;be&nbsp;located&nbsp;as&nbsp;a&nbsp;call&nbsp;subroutine&nbsp;elsewhere<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;pclath_temp,w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;retrieve&nbsp;copy&nbsp;of&nbsp;PCLATH&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;PCLATH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;restore&nbsp;pre-isr&nbsp;PCLATH&nbsp;register&nbsp;contents<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;status_temp,w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;retrieve&nbsp;copy&nbsp;of&nbsp;STATUS&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;STATUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;restore&nbsp;pre-isr&nbsp;STATUS&nbsp;register&nbsp;contents<br />&nbsp;&nbsp;&nbsp;&nbsp;swapf&nbsp;&nbsp;&nbsp;w_temp,f<br />&nbsp;&nbsp;&nbsp;&nbsp;swapf&nbsp;&nbsp;&nbsp;w_temp,w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;restore&nbsp;pre-isr&nbsp;W&nbsp;register&nbsp;contents<br />&nbsp;&nbsp;&nbsp;&nbsp;retfie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;return&nbsp;from&nbsp;interrupt<br />
yewuyi 发表于 2007-6-6 13:31 | 显示全部楼层

就是这几个地址的问题

w_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />status_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />pclath_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| 兰天白云 发表于 2007-6-7 08:44 | 显示全部楼层

就是这几个地址的问题

yewuyi的写法正确<br /><br />w_temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />status_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;saving<br />pclath_temp&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0x73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variable&nbsp;used&nbsp;for&nbsp;context&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />以下写法错误<br /><br />P_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6DH<br />W_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6EH<br />S_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6FH<br /><br />特别是&nbsp;&quot;W_TEMP&nbsp;&nbsp;EQU&nbsp;&nbsp;6EH&quot;<br />
hjh002 发表于 2007-6-12 16:50 | 显示全部楼层

地址那样定义没有问题啊。

如果字母开头的地址,就要在前面加0,比如地址是EEH的,要写成&nbsp;0EEH,象你这样数字开头的是没有问题的。
 楼主| 兰天白云 发表于 2007-6-13 08:19 | 显示全部楼层

这么容易让人误解啊

这么容易让人误解啊<br />我是说w_temp&nbsp;&nbsp;&nbsp;&nbsp;不能定位在0x6e,而只能定位在0x70以上的地址
hjh002 发表于 2007-6-13 08:32 | 显示全部楼层

定位在0X6E有什么问题啊?

  
hjh002 发表于 2007-6-13 11:45 | 显示全部楼层

哦,我知道了,是RAM的BANK问题。

  
孤独泪 发表于 2007-6-15 13:34 | 显示全部楼层

学习,马上就要用917或者946了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

2961

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部