加载中…
  
博文
标签:

杂谈

分类: C8051F

#include 'c8051F040.h'
#define uchar unsigned char
#define uint unsigned int

void port_init();
void os_init();
void uart_init();
void time_init();

void main()
{
        uchar g;
 WDTCN = 0xDE;                                           // 关闭看门狗 地址是OxFF
 WDTCN = 0xAD;                                           //防止意外产生的禁止操作
 os_init();               &nbs

标签:

其他频道

分类: 技术文章(电子)
 

//2MS的方波这个应该可以

#include<reg51.h>
sbit P1_1=P1^0;
unsigned char num;
void main()
{
 EA=1;//CPU开中断
 ET0=1;//定时器0中断允许,这是中断方式,如果是查询方式要用到TMOD=0x01
 TH0=(65536-500)/256;//记数初值,500次,12/12M*500=2ms,65536是方式1的16位定时器
 TL0=(65536-500)%256;
 TR0=1;//启动TIMER0
 while(1)
 {
  if(num==2)
  {
   num=0;
   P1_1=~P1_1;
  }
 }
}

void timer0() interrupt 1 using 0//设置T/C0中断服务程序,1表示方式1
{
 TH0=(65536-500)/256;
 TL0=(65536-500)%256;
 num++;
}

标签:

其他频道

分类: 技术文章(电子)
 

  下降沿触发在硬件上可以用INT0,INT1中断来实现,当中断不够用的时候,可以考虑软件实现,如下:
;上升沿触发:/A×B为高启动计数
;下降沿触发:A×/B为高启动计数
;这是个计数器,若有上升沿或下降沿,则计数.count+/A×B--->count
;设R0为计数单元地址,P1.0为信号输入口,00H,01H分别记录A(本次采样得到的值),B(上次采样得到的值)状态
;上升沿触发:
       MOV C,P1.0   ;采样B值
       MOV 01H, C   ;放入01H中
       ANL C,00H    ;/A(00H)×B(01H)的值送C
       CLR A        ;COUNT+C送COUNT,先把ACC清零,确保加的是CY
       ADDC A,@R0   ;这个指令其实是ACC,CY,@R0三个相加,所以,是COUNT+C+0--->COUNT
       MOV @R0, A
       MOV C,01H&nbs

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有