/********************************************************************//*主系统时钟为8MHZ* *//********************************************************************/#include"msp430x16x.h"#define uint unsigned int#define uchar unsigned charuint numpass=0;void ht_init(){ _DINT();//关闭所有中断 _NOP(); //在保护程序之前与关中断之间最少有一步操作。 P1DIR|=BIT0;//输输出方向 P1OUT|=BIT0;//输出为0}void ht_OK(){ _BIS_SR(GIE);//开启所有中断}void delay_ms(uchar ms)//ms{ uchar x=0;uint y=0; for(x=ms;x>0;x--) for(y=1955;y>0;y--);}void delay_10us()//10us{ uchar x=0; for(x=15;x>0;x--);}uchar readbyte()//读一个字节{ uchar value=0; uchar i=0; for(i=8;i>0;i--) { value<<=1; while(!(P1IN&BIT1)) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}} delay_10us(); delay_10us(); delay_10us(); delay_10us(); if(P1IN&BIT1) { value|=0x01; while(P1IN&BIT1){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}//等待剩余3 } if(i!=7) { while(!(P1IN&BIT1)){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}} } } return value;}uchar ht_start(uchar *ht)//开始读取数据{ uchar check_value=0; uchar s[5]={0,0,0,0,0}; ht_init();//关闭所有中断 P1DIR|=BIT1;//输出 P1OUT|=BIT1; P1OUT&=~BIT1;//输出低电平 delay_ms(25);//输出大于18MS低电平 P1OUT|=BIT1;//拉高等待 delay_10us(); delay_10us(); delay_10us(); P1DIR&=~BIT1; while(P1IN&BIT1) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} while(!(P1IN&BIT1)) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} while(P1IN&BIT1) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} s[0]=readbyte(); s[1]=readbyte(); s[2]=readbyte(); s[3]=readbyte(); s[4]=readbyte(); check_value=s[0]+s[1]+s[2]+s[3]; if(check_value!=s[4]) { ht_OK(); return 0; } else { ht[0]=s[0]; ht[1]=s[2]; ht_OK(); return 1; } }#include"msp430x16x.h"#define uint unsigned int#define uchar unsigned charuint numpass=0;void ht_init(){ _DINT();//关闭所有中断 _NOP(); //在保护程序之前与关中断之间最少有一步操作。 P1DIR|=BIT0;//输输出方向 P1OUT|=BIT0;//输出为0}void ht_OK(){ _BIS_SR(GIE);//开启所有中断}void delay_ms(uchar ms)//ms{ uchar x=0;uint y=0; for(x=ms;x>0;x--) for(y=1955;y>0;y--);}void delay_10us()//10us{ uchar x=0; for(x=15;x>0;x--);}uchar readbyte()//读一个字节{ uchar value=0; uchar i=0; for(i=8;i>0;i--) { value<<=1; while(!(P1IN&BIT1)) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}} delay_10us(); delay_10us(); delay_10us(); delay_10us(); if(P1IN&BIT1) { value|=0x01; while(P1IN&BIT1){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}//等待剩余3 } if(i!=7) { while(!(P1IN&BIT1)){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}} } } return value;}uchar ht_start(uchar *ht)//开始读取数据{ uchar check_value=0; uchar s[5]={0,0,0,0,0}; ht_init();//关闭所有中断 P1DIR|=BIT1;//输出 P1OUT|=BIT1; P1OUT&=~BIT1;//输出低电平 delay_ms(25);//输出大于18MS低电平 P1OUT|=BIT1;//拉高等待 delay_10us(); delay_10us(); delay_10us(); P1DIR&=~BIT1; while(P1IN&BIT1) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} while(!(P1IN&BIT1)) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} while(P1IN&BIT1) {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}} s[0]=readbyte(); s[1]=readbyte(); s[2]=readbyte(); s[3]=readbyte(); s[4]=readbyte(); check_value=s[0]+s[1]+s[2]+s[3]; if(check_value!=s[4]) { ht_OK(); return 0; } else { ht[0]=s[0]; ht[1]=s[2]; ht_OK(); return 1; } }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>