导航:首页 > 操作系统 > 单片机程序北航

单片机程序北航

发布时间:2025-06-11 04:50:09

‘壹’ pic单片机串行通信收发字符串的问题!高分求助!

我把你的程序做了些修改,并在PROTEUS中仿真,是正确的,图中的上面是仿真的发送,我输入了“HowAreYou?"并按回车键,单片机收到回车后,先输出"OK!!!"及回车,再把收到的数回送出去。

这里加了宏定义。有些内容请见北航的《PIC16系列单片机C程序设计与PROTEUS仿真》一书。

#include<pic.h>

__CONFIG(0x3F31);

#defineucharunsignedchar

#defineuintunsignedint

//宏定义,发送一个数,并等等发送完毕

#defineSEND_ONE(A)

TXREG=A;

while(!TRMT)

bitFLAG=0; //标志位,如收到回车字符,此位为1

ucharN=0; //接收数据累计

ucharDD[20]; //接收数据存放在此

constucharDD1[7]="OK!!!"; //虽然只有6个字符,但要用7个单元,最后一个为结束字符,const表示存放在程序存储器中的常数

voidinit(void);

voidinterruptISR(void);

voidmain()

{ uchari;

init();

while(1)

{ if(FLAG)

{ for(i=0;i<6;i++) //先发送“OK!!!”

{ SEND_ONE(DD1[i]);

}

SEND_ONE(0x0D); //发送一个回车

for(i=0;i<N;i++)

{ SEND_ONE(DD[i]);

}

FLAG=N=0; //重新清0,为下次接收做准备

}

};

}

voidinit()

{

TRISC=0xff; //这里要把高二位设置这输入,但在以下的串口使能后,系统自动将RC6变成通信输出

TXSTA=0x24;

RCSTA=0x90;

SPBRG=25; //9600波特率

GIE=1;

PEIE=1;

RCIE=1; //打开中断

}

voidinterruptISR(void)

{

if(RCIE&&RCIF) //不必清RCIF,因为接收数据后RCIF自动清0

{ DD[N]=RCREG;

if(DD[N]==0x0D)

FLAG=1; //如果收到回车,标志位置1

N++;

if(N>=20)

N=0; //如果接收数据数超出,从0存放

}

}

‘贰’ pic单片机串行异步通信的C程序,发送邮箱[email protected],谢谢了!

我这里把北航的<PIC16系列单片机C程序设计与PROTEUS仿真>一书的例4.15发在这里,这个例子是二个单片机之间的异步通信,主机每按一下按键,就把数发出,人机接收到就把数在LED上显示出来.因此这个例子有发送和接收二种.个人认为这本书值得你看的.给的图和程序都是所附光盘中的.

主机的程序:

//异步串行通信发送,按一下按键RB0,发送一个字节,从20H开始发送

#include<pic.h>

//__CONFIG(0x3F71); //运行用

__CONFIG(0x3F39); //调试用

#defineLED RB1

voidDELAY(unsignedint); //延时(i)ms

voidCSH(void); //初始化程序

//宏定义,发送一个数,并等待其发送结束

#defineSEND_ONE(a)

TXREG=a;

while(TRMT==0)

charaaa;

main(void)

{

CSH();

aaa=0x20; //发送的第一个数

LED=0;

while(1);

}

//======延时(n)ms

voidDELAY(unsignedintn)

{ unsignedintj;

chark;

for(j=0;j<n;j++)

for(k=246;k>0;k--)NOP();

}

//======初始化程序

voidCSH(void)

{ TRISB=0B00000001; //RB0为按键输入

TRISC=0B11100000;

TRISD=0; //D口全为输出,接LED

PORTD=0;

INTCON=0B10010000; //RB0中断使能

SPBRG=25; //波特率9600,高速,8位数据

RCSTA=(0b10010000);

TXSTA=(0b00100100);

}

//======//中断服务程序

voidinterruptINT_ISR(void)

{ charx;

if(INTF) //按键RB0中断,LED3闪一下,蜂鸣器响

{ LED=1;

SEND_ONE(aaa);

PORTD=aaa;

aaa++; //发送的数加1,为下次发送做准备

DELAY(100);

LED=0;

INTF=0;

}

}

从机的程序:

//异步串行通信的接收

#include<pic.h>

__CONFIG(0x3F39); //调试用

#defineLED RB1

voidDELAY_I(unsignedint); //延时(i)ms,中断用

voidCSH(void); //初始化程序

voidinterruptINT_ISR(void); //中断服务程序

main(void)

{ CSH();

LED=0;

while(1);

}

//======初始化程序

voidCSH(void)

{ TRISB=0B11110000;

TRISC=0B11100011; //RC2为蜂鸣器输出

TRISD=0;

PORTD=0;

INTCON=0B11000000; //

RCIE=1; //接收中断

SPBRG=25; //波特率9600,高速,8位数据

RCSTA=(0b10010000);

TXSTA=(0b00100100);

PORTB=0b00000000;

}

//======//中断服务程序

voidinterruptINT_ISR(void)

{ charx;

if(RCIE&RCIF) //接收中断,LED闪一下

{ LED=1;

x=RCREG; //读接收数据,实际上会自动将RCIF清0

PORTD=x;

DELAY_I(100); //延时为了能看清LED闪亮

LED=0;

}

}

//======延时(n)ms

voidDELAY_I(unsignedintn)

{ unsignedintj;

chark;

for(j=0;j<n;j++)

for(k=246;k>0;k--)NOP();

}

‘叁’ 求用PIC单片机语言编写一段crc8校验码的程序 (求大神指点,要是有注释就更好了)

可以参考北航的《PIC16系列单片机C程序设计与PROTEUS仿真》一书,里面有8位的和16位的CRC程序,是用PICC编的,8位的好象在第6章的一线式温度传感器那一节。

‘肆’ pic系列单片机用c语言编程时,让他执行A/D转换的指令是什么

AD转换不是一条指令就可以完成的,它要先经过端口设置,AD设置等过程后才能准备进入AD转换,下例是从北航的<PIC16单片机C程序设计与PROTEUS仿真>一书中得到的启发编制的程序,希望对你能有帮助.建议你看一下这本书,对初学和想进一步提高在PIC单片机应用编程等会有用的.

附图是对应程序的,在仿真时调整电位器可以看到AD结果的变化,并通过计算器可以验证程序的正确性.

//ADl转换示例,可以改变输入电压、AD通道、结果对齐方式等,看其变化

#include<pic.h>

__CONFIG(0x3F39);//配置位设置

voidmain(void)

{ chari,X,Y;

TRISA=0xFF; //将所有的A口设置为输入

TRISE=0x03; //将所有的E口设置为输入

TRISD=0; //C口与D口全为输出

TRISC=0;

ADCON1=0b10000000; //设置AD结果对齐方式、AD时钟选择(与ADCON0的位7,6一起),AD端口设置等

ADCON0=0b01011001; //AD时钟选择(与ADCON1的位6一起),通道选择,AD模块使能

while(1)

{ NOP();

for(i=0;i<3;i++) //延时时间大约20us

NOP();

ADGO=1; //开始AD

while(ADGO==1); //等待AD转换完成

ADIF=0;

X=ADRESH; //读取AD结果高字节至C口

PORTC=X;

Y=ADRESL; //读取AD结果低字节至D口

PORTD=Y;

};

}

阅读全文

与单片机程序北航相关的资料

热点内容
查魔兽服务器ip地址 浏览:121
安卓4为什么被淘汰 浏览:861
想买一个阿里云的服务器要多少钱 浏览:411
从程序员到架构师之路 浏览:550
androidui架构 浏览:474
元通炒股公式源码 浏览:960
酯化循环气压缩机用什么驱动 浏览:58
java搜索图片 浏览:571
dns服务器地址总是自动变换 浏览:970
android数据包开发 浏览:213
k邻近搜索算法brute 浏览:294
微软云如何开服务器 浏览:29
心体与性体pdf 浏览:196
phpnullisset 浏览:793
加密相册解密到照片库在哪 浏览:375
php变量前加 浏览:813
缓解压力最好的坐垫 浏览:138
51单片机ret 浏览:777
python广度优先有向权值图 浏览:874
程序员是技术 浏览:252