打印

单片机数据采集问题

[复制链接]
1339|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-2-22 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用单片机外部中断采集脉冲数据,脉冲是连续的脉宽为3us的脉冲,我用时钟晶振为24M,一个机器周期是1/24us,我把这一串脉冲数据给单片机的外部中断0口,当单片机响应外部中断时,在中断服务程序中我连续采集8位数据,数据采集完毕,我用单片机的串口中断发送给上位机,由于脉冲是一高电平一低电平的连续脉冲,所以受到的数据应该是0x55,但是在计算机端,串口调试助手中,却发现有0xaa,0xa5等数据,下面是我的程序,请有经验的师傅能给予指点
/使用的单片机是STC12C5A60S2,晶振24M肞3.2/INT0接收一字节脉冲数据,
//脉冲数据宽度为3us,将接收到的八位数据整理成字节后通过串口吧数据发送给上位机
  ORG 00H
  AJMP START
  ORG 0003H
  AJMP ZHONGDUAN
START:MOV TMOD,#20H
  MOV SCON,#50H
  MOV TH1,#0F3H
  MOV TL1,#0F3H
  SETB TR1
  SETB EA
  SETB EX0
  SETB IT0
  AJMP $

ZHONGDUAN:
  MOV R2,#07H //2个机器周期
  MOV R0,#1 //2个机器周期
  DJNZ R2,$ //4个机器周期
  JB P2.2, CHULI1 //4个机器周期
  MOV R3,#0 //2个机器周期
  NOP //1个机器周期
  AJMP JISUAN1 //3个机器周期
CHULI1: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN1: MOV A,R0 //2个机器周期
  RL A //1个机器周期
  ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //2个机器周期
JB P2.2,CHULI2 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期   
AJMP JISUAN2 //3个机器周期
CHULI2: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN2: MOV A,R0 //2个机器周期
  RL A //1个机器周期
ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
  MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI3 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN3 //3个机器周期
CHULI3: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN3: MOV A,R0 //2个机器周期
  RL A //1个机器周期
ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI4 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN4 //3个机器周期
CHULI4: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN4: MOV A,R0 //2个机器周期   
  RL A //1个机器周期
ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI5 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN5 //3个机器周期
CHULI5: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN5: MOV A,R0 //2个机器周期   
  RL A //1个机器周期
ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI6 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN6 //3个机器周期
CHULI6: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN6: MOV A,R0 //2个机器周期
  RL A //1个机器周期
ORL A,R3 //2个机器周期
MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI7 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN7 //3个机器周期
CHULI7: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN7: MOV A,R0 //2个机器周期
  RL A //1个机器周期
ORL A,R3 //2个机器周期
  MOV R0,A //2个机器周期
MOV R2,#0DH //2个机器周期
DJNZ R2,$ //4个机器周期
JB P2.2,CHULI8 //4个机器周期
MOV R3,#0 //2个机器周期
  NOP //1个机器周期
AJMP JISUAN8 //3个机器周期
CHULI8: MOV R3,#1 //2个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
  NOP //1个机器周期
JISUAN8: MOV A,R0
  ANL A,#7FH
  RL A
ORL A,R3
MOV SBUF,A
JNB TI,$
CLR TI
RETI
  END

相关帖子

沙发
txcy| | 2012-2-22 16:53 | 只看该作者
再计算下波特率

使用特权

评论回复
板凳
Aaron238| | 2012-3-9 12:25 | 只看该作者
3us 你怎么采集的??

使用特权

评论回复
地板
yamato2011| | 2012-3-9 17:44 | 只看该作者
3us时间太短了。你不能放在一个中断中采集,而且还要采集八次。你可以设置中断为边沿触发,然后再计数不就行了么。

使用特权

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

本版积分规则

239

主题

2284

帖子

0

粉丝