电机转速信号的单片机测量程序

本文介绍了一个使用8253定时器的应用实例,通过C语言编程实现2秒中断信号的产生,并对外部寄存器进行初始化配置。利用定时器0产生门控信号,控制8253计数器0的工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Code:
  1. #include<reg52.h>
  2. #include<absacc.h>
  3. #include<stdio.h>
  4. #defineucharunsignedchar
  5. #defineuintunsignedint
  6. //定义8253的寄存器地址
  7. #defineCOMXBYTE[0x6000]//定义8253的控制字寄存器地址
  8. #defineC0XBYTE[0x0000]//定义8253的计数器0寄存器地址
  9. #defineC0IXBYTE[0x1000]
  10. sbitP1_7=P1^7;
  11. uintBUF810;
  12. ucharh,l,a,b,c,sendflag,FREQ;
  13. //主函数,初始化定时器和片外寄存器
  14. voidmain(void)
  15. {
  16. EA=1;PT0=1;
  17. ET0=1;
  18. IT0=1;IT1=1;
  19. EX0=1;EX1=1;ET2=1;
  20. T2CON=0x08;
  21. TMOD=0x21;//用定时器0产生2s的中断信号,为8253计数提供门控。
  22. TH0=-1000/256;
  23. TL0=-1000%256;
  24. //向8253R中的控制字寄存器中选择计数器0,并对其幅初值0;
  25. COM=0x30;
  26. C0=0;C0=0;
  27. TR0=1;
  28. sendflag=1;
  29. while(1){}
  30. }
  31. /*定时计数器0的中断服务子程序*/
  32. voidtimer0(void)interrupt1using1
  33. {
  34. TH0=-1000/256;//定时器T0的高四位赋值
  35. TL0=-1000%256;
  36. FREQ=FREQ+1;//定时器T0的低四位赋值
  37. if(FREQ==1000)//1秒判断
  38. {
  39. FREQ=0;
  40. P1_7=!P1_7;//信号输出端口取反
  41. COM=0x00;//计数器0闩锁操作
  42. l=C0;//分别读取高、低8位的数据
  43. h=C0;
  44. BUF810=-(h*256+l);
  45. COM=0x30;
  46. C0=0;C0I=0;
  47. }
  48. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值