打印

怪事年年有啊~

[复制链接]
2684|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhizuzhe|  楼主 | 2007-11-4 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, TE, pi, gp, IO
刚学PIC单片机,用的PIC10F202,写了段程序实现方波输出:
    list P=10F202
    #INCLUDE <P10F202.INC>
    __CONFIG _MCLRE_OFF &_CP_OFF &_WDT_OFF
TEMP    EQU    0x10
TEMP1    EQU    0x11
TEMP2    EQU    0x12
TEMP3    EQU    0x13
    ORG    0x00;
INIT
    MOVLW    0x00;
    OPTION    ;
    BCF    OSCCAL,0;
    MOVLW    0x0E;
    TRIS    GPIO;
EE
    MOVLW    0x00;
    MOVWF    GPIO;
    CALL    DELAY10MS;
    MOVLW    0x03;
    MOVWF    GPIO;
    CALL    DELAY10MS;
    GOTO    EE;

DELAY10MS
    MOVLW    0x0E;改这里!!!改成0xFF
    MOVWF    TEMP;
D2
    MOVLW    0xED;
    MOVWF    TEMP1;
D1
    DECFSZ    TEMP1,1;
    GOTO    D1;
    DECFSZ    TEMP,1;
    GOTO    D2;
    RETLW    0;
输出的波形是高电平5ms,低电平10ms,怪事1。。。
当我将DELAY10MS中的第一句MOVLW 0x0E改成MOVLW 0x96;本打算延时100ms的,可是用示波器量GP0口,只有一个微妙级的正脉冲。。。怪事2.
请问这是为什么啊?
沙发
zhizuzhe|  楼主 | 2007-11-4 22:58 | 只看该作者

等待高手帮忙解答一下

我用SIM仿真的时候,程序运行时间是对的。。。

使用特权

评论回复
板凳
zhizuzhe|  楼主 | 2007-11-5 09:58 | 只看该作者

等待,兰天白云这些高手呢。。。

真的想不通啊,用户手册也仔细查过了。。。

使用特权

评论回复
地板
zhizuzhe|  楼主 | 2007-11-5 10:47 | 只看该作者

我将0x0E逐渐加大,

比如加大到0x10,发现方波的周期还是15ms左右,但是占空比变小了,高电平的时间变短了

使用特权

评论回复
5
lxrlxr| | 2007-11-5 11:16 | 只看该作者

程序没错,你测的IO口是不是对

使用特权

评论回复
6
zhizuzhe|  楼主 | 2007-11-5 12:35 | 只看该作者

我测的GP0口

使用特权

评论回复
7
兰天白云| | 2007-11-5 13:36 | 只看该作者

你再试试

INIT
    MOVLW    0x00;
    OPTION    ;
    BCF    OSCCAL,0;
    MOVLW    0x0E;
    TRIS    GPIO;


INIT
    MOVLW    0x00;
    OPTION    ;
    BCF    OSCCAL,0;   
    MOVLW    0x00;    改
    TRISGPIO     ;    改

使用特权

评论回复
8
zhizuzhe|  楼主 | 2007-11-5 14:33 | 只看该作者

TRISGPIO没这指令啊

我改成TRISGPIO,这条指令在HEX中不存在的~

使用特权

评论回复
9
zhizuzhe|  楼主 | 2007-11-5 14:37 | 只看该作者

我现在是用51单片机做PIC单片机的编程器

因为PIC10F202的编程器时序比较简单,程序的下载已经没有问题了,
因为我写进去的再读出来并通过LED显示,是对的。

TRISGPIO这条指令应该没有,因为变成了标号一样的颜色,
HEX文件中这条指令也没有相应的操作码。

使用特权

评论回复
10
zhizuzhe|  楼主 | 2007-11-5 15:25 | 只看该作者

按照兰天白云的意思

我改成:
MOVLW 0x00;
TRIS GPIO;

然后在GP0和GP1口测量波形,输出波形相同。
现象还是一样。。。

使用特权

评论回复
11
zhizuzhe|  楼主 | 2007-11-5 15:39 | 只看该作者

我再改

我将DELAY10MS下的第一句话改成
MOVLW 0x07;
也就是延时子程序大概延时5ms,
用示波器测量GP0和GP1口,
出来的波形是:低电平(5ms),高电平(5ms),低电平(5ms),高电平(1ms),低电平(5ms),高电平(5ms),低电平(5ms),高电平(1ms)……

使用特权

评论回复
12
兰天白云| | 2007-11-5 16:23 | 只看该作者

关掉比较器试试

使用特权

评论回复
13
zhizuzhe|  楼主 | 2007-11-5 16:37 | 只看该作者

PIC10F202没有比较器的啊~

使用特权

评论回复
14
zhizuzhe|  楼主 | 2007-11-5 20:21 | 只看该作者

把DELAY10MS下的第一句话改了几个参数

就感觉PIC每10几个ms固定有一次低电平输出一样。
但是我将配置字写成了关掉WDT和定时器啊~

使用特权

评论回复
15
xieyuanbin| | 2007-11-6 08:17 | 只看该作者

贴出的程序没错。

估计是你配置字没写正确导致WDT溢出所致。因10-15ms刚好是WDT的默认溢出时间。

使用特权

评论回复
16
xieyuanbin| | 2007-11-6 08:17 | 只看该作者

你可在延时程序中加入CLRWDT指令看看

使用特权

评论回复
17
zhizuzhe|  楼主 | 2007-11-6 11:08 | 只看该作者

xieyuanbin大侠答到点了,厉害,呵呵

我昨天晚上也是这么想的,
然后试了试改变WDT的分频比,
果然,复位的时间随着改变。
但是迷惑的是,我将配置字(0x3ff单元)写为全0还是没有禁掉WDT啊,
按照datasheet上说的,将WDTE位清零WDT就应该被禁掉才对啊~

使用特权

评论回复
18
xieyuanbin| | 2007-11-6 15:09 | 只看该作者

你根本没有写入配置字,

所以改什么都没用。看看有没有别的烧写器,用别的烧写器试试。或者做一个JDM.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

214

帖子

1

粉丝