打印

急请教

[复制链接]
1385|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tracyf|  楼主 | 2008-3-10 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老师,我编了个程序,,内容如下:
用定时器0  1配合产生脉宽不等的方波,
用外部中断0检测那不等的方波,当检测到高低电平的跳变时,让电机转动.
我是把p3.2的脚直接连至三极管的E极(这样直接连接是否可行)去检测.
现在出现的问题是:
用示波器测量,p3.2脚默认电平,为高电平;这样,当三极管E极电平高低跳变时,P3.2脚就检测不到高低的跳变了;(单片机默认的高低电平是几伏啊?)
当把P3.2脚默认电平设为低时,程序一开始就直接进行了外部中断0
请各位老师帮忙,应该如何解决;谢谢. 

相关帖子

沙发
tracyf|  楼主 | 2008-3-10 18:07 | 只看该作者

RW

 AJMP MAIN
     ORG 0003H  ;
     AJMP LOOP  
     ORG 000BH  
     AJMP LOOP1
     ORG 001BH  
     AJMP LOOP2
LOOP:
     SETB P1.6  ;¹
     mov r5,#15  
dly1:mov r6,#100
dly2:mov r7,#100
     djnz r7,$
     djnz r6,dly2
     djnz r5,dly1
     CLR P1.6   ;¿
dly11:mov r6,#100
dly22:mov r7,#100
     djnz r7,$
     djnz r6,dly22
     djnz r5,dly11
     SETB P1.5    ;µç
     mov r5,#60  ;
dly3:mov r6,#100
dly4:mov r7,#100
     djnz r7,$
     djnz r6,dly4
     djnz r5,dly3
     CLR P1.5  ;
     RETI       
LOOP1:CPL P1.1   ;²²¨
     mov r5,#15  ;
dly7:mov r6,#100
dly8:mov r7,#100
     djnz r7,$
     djnz r6,dly8
     djnz r5,dly7
     SETB ET1   ;¿
     MOV TH0,#3CH   ;¸µ
     MOV TL0,#0AFH
     CLR ET0      ;¹Ê±Æ÷0
     RETI         ;Ø
LOOP2:CPL P1.1    ;²½
     mov r5,#50   ;±
dly9:mov r6,#100   
dly0:mov r7,#100
     djnz r7,$
     djnz r6,dly0
     djnz r5,dly9
     SETB ET0     ;¿ªÆô¶¨Ê±Æ÷0
     MOV TH1,#3CH   ;¸øT1ÖØи½³õÖµ
     MOV TL1,#0AFH
     CLR ET1       ;¹Ø±Õ¶¨Ê±Æ÷1
     RETI          ;ÖжϷµ»Ø
MAIN:MOV TMOD,#11   ;²ÉÓö¨Ê±Æ÷0Óë1,·½Ê½1
     MOV TH0,#3CH
     MOV TL0,#0AFH
     MOV TH1,#3CH
     MOV TL1,#0AFH
     SETB EA      ;¿ª×ÜÖжÏ
     SETB ET0       ;ÆôÓÃT0ÖжÏ
     SETB EX0      ;ÆôÓÃÍⲿÖжÏ0
     SETB IT0       ;ÍⲿÖжÏ0¸ºÌø±äÓÐЧ
     SETB PX0       ;ÍⲿÖжÏ0ÖжÏÓÅÏÈ
     CLR P1.6      ;¿ªÆôµçԴָʾµÆ
     
     SETB P1.1       ;ĬÈÏ·½²¨ÆðʼΪ¸ßµçƽ
     SETB TR0       ;¶¨Ê±Æ÷0¿ªÊ¼
     SETB TR1        ;¶¨Ê±Æ÷1¿ªÊ¼
     SJMP $
     END

使用特权

评论回复
板凳
xuyan8401| | 2008-3-11 08:01 | 只看该作者

RE

怎么没人帮忙啊?来帮帮忙啊。

使用特权

评论回复
地板
xuyan8401| | 2008-3-11 08:07 | 只看该作者

RE

AJMP MAIN
     ORG 0003H    ;外部中断0入口
     AJMP LOOP
     ORG 000BH    ;定时器0入口
     AJMP LOOP1
     ORG 001BH    ;定时器1入口
     AJMP LOOP2
LOOP:
     clr EX0
     SETB P1.3    ;关闭电源指示灯,指示外部中断0起效
     mov r5,#15   ;延时
dly1:mov r6,#100
dly2:mov r7,#100
     djnz r7,$
     djnz r6,dly2
     djnz r5,dly1
     CLR P1.3     ;开启电源指示灯,开始处理外部中断0的真正内容
     mov r5,#20   ;延时
dly11:mov r6,#100
dly22:mov r7,#100
     djnz r7,$
     djnz r6,dly22
     djnz r5,dly11
     SETB P1.1     ;输出高电平,让电机转动
     mov r5,#60    ;延时
dly3:mov r6,#100
dly4:mov r7,#100
     djnz r7,$
     djnz r6,dly4
     djnz r5,dly3
     CLR P1.1     ;电机停止转动
     SETB EX0
     RETI          ;中断返回
LOOP1:CPL P1.0     ;把P1。0取反,让其产生高低的脉冲信号(低)
     cpl p1.7
     mov r5,#50    ;延时
dly9:mov r6,#100
dly0:mov r7,#100
     djnz r7,$
     djnz r6,dly0
     djnz r5,dly9
     SETB ET1      ;开启定时器1中断
     MOV TH0,#3CH  ;给T0重新附初值
     MOV TL0,#0AFH
     CLR ET0      ;关闭T0中断
     RETI        ;中断返回
LOOP2:CPL P1.0    ;把P1。0取反,让其产生高低的脉冲信号(高)
      cpl p1.7
     mov r5,#10  ;延时
dly99:mov r6,#100
dly00:mov r7,#100
     djnz r7,$
     djnz r6,dly00
     djnz r5,dly99
     SETB ET0      ;开启T0中断
     MOV TH1,#3CH   ;给T1重新附初值
     MOV TL1,#0AFH
     CLR ET1       ;关闭T1中断
     RETI          ;中断返回
MAIN:
     MOV TMOD,#11   ;定时器0  1都采用方式1定时方式
     MOV TH0,#3CH
     MOV TL0,#0AFH
     MOV TH1,#3CH
     MOV TL1,#0AFH
     SETB EA      ;开总中断
     SETB ET0     ;开启T0不断
     SETB EX0     ;开启外部中断0
     SETB IT0     ;外部中断0负跳变有效
     SETB PX0     ;外部中断0中断优先
     
     CLR P1.3     ;开启电源指示灯
     CLR P1.2     ;接收端一直是低电平
     setb p1.7
     clr p1.1
     SETB P1.0     ;发送端默认为高电平
     SETB TR0     ;定时器0启动
     SETB TR1     ;定时器1启动
     SJMP $
     END

使用特权

评论回复
5
zgl7903| | 2008-3-11 09:09 | 只看该作者

这个也太浪费资源了吧,两个定时器 + 一个外部中断

使用定时器中断做一个PWM发生器就够用了

初始化定时器为PWM频率
定时器中断中使用一个计数器来控制占空比并控制输出

使用特权

评论回复
6
xuyan8401| | 2008-3-11 13:37 | 只看该作者

RE

谢谢哦.现在的问题不是这个啊,
现在出现的问题是:
用示波器测量,p3.2脚默认电平,为高电平;这样,当三极管E极电平高低跳变时,P3.2脚就检测不到高低的跳变了
如果把P3.2脚设为0,由于是直接连接,三极管E极电平就也为0了,也没跳变了.怎么办啊?

使用特权

评论回复
7
maychang| | 2008-3-11 16:24 | 只看该作者

怎么会检测不到?

你那个接地的电阻多大?

使用特权

评论回复
8
xuyan8401| | 2008-3-12 16:41 | 只看该作者

RE

谢谢.我那接地电阻是390K的.
因为P3.2脚默认为高电平,所以当我把P3.2与三极管E极相连时,三极管都截止了,所以测不到啊?请教下,该如何检测的到?
另外,再问一下,红外拉管应该如何连接.是有缺口端接电源还是没有缺口端接电源?

使用特权

评论回复
9
xuyan8401| | 2008-3-13 09:50 | 只看该作者

图已换

你好,我三极管基极接了红外接收管,有缺口端接电源。所以当没收到信号的情况下,三极管已经导通,
当收到信号后,三极管截止;所以,C极的电位就有高低变化了,这样就可以用T1口检测到了;
但是,现在的情况是在没收到信号的情况下,三极管就工作了,功耗相当的大,请问下如何能把功耗降下来呢?
看图,我只要能取到高低变化的电平就行了。
当接收管反过来接时,在没收到信号的情况下,三极管截止。此时C极电位为高;可是无论无如,都取不到C极低的电位,请帮忙。

使用特权

评论回复
10
xuyan8401| | 2008-3-13 09:52 | 只看该作者

单片IO口

单片IO口默认电平为高,所以拉不下来。。。急。。。

使用特权

评论回复
11
孤星119| | 2008-3-13 10:11 | 只看该作者

怎么可能?LZ基础的都没弄懂啊.

单片机必须要设为高电平的.否则怎么去作为输入脚来检测呢.建议LZ去看看基础的书了.

使用特权

评论回复
12
computer00| | 2008-3-13 10:19 | 只看该作者

51单片机的话,IO做为输入用时要设置为高电平。

另外,推荐你使用一体化的红外接收头,输出直接接到IO口上。

先前的电路,下拉电阻为390K,当然是太大了,无法将IO拉低。

你后面这个电路,由于51内部有上拉电阻,所以集电极上的上拉电阻可以断开不要。
适当选择基极那个电阻,功耗肯定不会大的。

使用特权

评论回复
13
tracyf|  楼主 | 2008-3-13 19:08 | 只看该作者

RE

嗯,谢谢11  12楼两位老师;我之前一直认为只是P1口作输出输要至高电平呢.
那我再去试试,估记拉不到低就是没至高电平的原故.
另外,再请问,单片机把多少电平以下视为低,多少电平以上视为高啊?谢谢.
是不是是0.7与2伏啊?

使用特权

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

本版积分规则

35

主题

122

帖子

0

粉丝