日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

串口编程实验报告

發布時間:2024/1/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 串口编程实验报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/**************************************************

實驗名稱:串口實驗一

實驗目的:在上位機上用串口調試助手發送一個字符X,單

?片機在收到字符后返回給上位機,顯示"I got?

?X",串口波特率設定為9600bps。

實驗備注:SMOD處在TCON第一位,TCON在單片機復位上電

?后清零。所以不設置TCON的話,串口方式在1、

?2、3時,波特率處于正常不加倍狀態,也不用

?特意去設置TCON。

**************************************************/

#include<reg52.h>

//#include<stdio.h>


#define uchar unsigned char

#define uint unsigned int


uchar flag, temp, i;


uchar code table[] = "I got ";


void init();


void main()

{

flag = 0;

temp = 0;

i = 0;

init();

while(1)

{

if(flag == 1)

{

ES = 0;

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

{

// TI = 1;

// printf("I got the ");

SBUF = table[i];

while(!TI);

TI = 0;


}

SBUF = temp;

while(!TI);

TI = 0;

flag = 0;

ES = 1;

}

}

}


void init()

{

TMOD = 0X20;//在定時器工作模式2時,

TH1 = 0xfd;//處在自動填裝八位寄存器狀態

TL1 = 0xfd;//波特率為9600兩寄存器各填裝0xfd

EA = 1;

ES = 1;

SM0 = 0;//10位異步收發,8位數據,

SM1 = 1;//定時器1溢出控制,波特率可控制

REN = 1;//串口接受允許位

TR1 = 1;

}


void ser() interrupt 4

{

RI = 0;

temp = SBUF;

flag = 1;

}


/**************************************************

實驗名稱:串口實驗二

實驗目的:單片機上電后等待從上位機串口發送來的命令,

?同時在數碼管的前三位上以十進制方式顯示A/D

?采集的數值,在未收到上位機發送來的啟動A/D

?轉換命令前數碼管始終顯示000。

?當收到上位機以十六進制發送來的01后,向上

?位機發送字符串"Turn on ad!",同時間隔1秒

?讀取一次A/D的值,然后把A/D采樣回來的8位二

?進制數轉換成十進制數表示的實際電壓浮點數,

?并發送給上位機,形式如:"The voltage is?

?3.398438V",發送周期間隔1秒,同時在數碼管

?上顯示十進制數。

?當收到上位機發來的十六進制02后,向上位機

?發送字符串"Turn off ad!",然后停止發送電

?壓值,數碼管上顯示上次結束時保持的值。

?當收到上位機發來的其他數時顯示"Error"

實驗備注:

**************************************************/

#include<reg52.h>

#include<intrins.h>

#include<stdio.h>


#define uchar unsigned char

#define uint unsigned int


sbit DUAN = P2^6;

sbit WEI = P2^7;

sbit ADRD = P3^7;

sbit ADWR = P3^6;


uchar code duan_table[]=

{0x3f,0x06,0x5b,0x4f,

?0x66,0x6d,0x7d,0x07,

?0x7f,0x6f,0x77,0x7c,

?0x39,0x5e,0x79,0x71};


uchar code wei_table_ad[]=

{0x7e,0x7d,0x7b,

?0x77,0x6f,0x5f};


uchar s_flag, t_flag, s_var, vol_led;

float vol_ser_t;


void init();

uchar read_ad();

void delay1ms(uchar);

void display(uchar);


void main()

{

init();

while(1)

{

if(s_flag == 1)

{

s_flag = 0;

ES = 0;

TI = 1;

switch (s_var)

{

case 1:

printf("Turn on the ad!\n");

TR0 = 1;

break;

case 2:

printf("Turn off the ad!\n");

TR0 = 0;

break;

default:

printf("Error!\n");

break;

}

while(!TI);

TI = 0;

ES = 1;

}

if(t_flag == 20)

{

vol_led = read_ad();

t_flag = 0;

vol_ser_t = (float)vol_led/256*5;

ES = 0;

TI = 1;

printf("The voltage is %fV\n",vol_ser_t);

while(!TI);

TI = 0;

ES = 1;

}

display(vol_led);


}

}


void init()

{

WEI = 1;

P0 = 0x7f;

WEI =1;

s_flag = 0;

t_flag = 0;

vol_led = 0;

vol_ser_t = 0;

TMOD = 0x21;

TH0 = (65536-46080)/256;

TL0 = (65536-46080)%256;

TH1 = (0xfd);

TL1 = (0xfd);

EA = 1;

ET0 = 1;

ES = 1;

// TR0 = 1;

TR1 = 1;

REN = 1;

SM0 = 0;

SM1 = 1;

}


uchar read_ad()

{

uchar vol;

ADWR = 1;

_nop_();

ADWR = 0;

_nop_();

ADWR = 1;

P1 = 0xff;

ADRD = 1;

_nop_();

ADRD = 0;

_nop_();

vol = P1;

_nop_();

ADRD = 1;

return vol;

}


void delay1ms(uchar x)

{

uchar i, j;

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

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

}


void display(uchar num)

{

DUAN = 1;

P0 = duan_table[num/100];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[0];

WEI = 0;

delay1ms(1);


DUAN = 1;

P0 = duan_table[num%100/10];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[1];

WEI = 0;

delay1ms(1);


DUAN = 1;

P0 = duan_table[num%10];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[2];

WEI = 0;

delay1ms(1);

}


void Timer0() interrupt 1

{

TH0 = (65536-46080)/256;

TL0 = (65536-46080)%256;

t_flag++;

}


void Ser() interrupt 4

{

RI = 0;

s_var = SBUF;

s_flag = 1;

}


/**************************************************

實驗名稱:串口實驗三

實驗目的:在上位機上用串口調試助手發送一個字符X,單

?片機在收到字符后返回給上位機,顯示"I got?

?X",串口波特率設定為9600bps。使用printf。

實驗備注:

**************************************************/

#include<reg52.h>

#include<stdio.h>


#define uchar unsigned char

#define uint unsigned int


uchar temp, s_flag;


//void delay1ms(uchar);


void main()

{

temp = 0;

s_flag = 0;

TMOD = 0X20;

TH1 = 0XFD;

TL1 = 0XFD;

EA = 1;

ES = 1;

SM0 = 0;

SM1 = 1;

REN = 1;

TR1 = 1;

while(1)

{

if(s_flag ==1)

{

ES = 0;

TI = 1;//在printf之前必須把TI置1;

printf("I got the %c\n",temp);

while(!TI);

TI = 0;

s_flag = 0;

ES = 1;

}

}

}


/*void delay1ms(uchar x)

{

uchar i, j;

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

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

}*/


void Ser() interrupt 4

{

RI = 0;

temp = SBUF;

s_flag = 1;

}


轉載于:https://blog.51cto.com/elvinsys/1611122

總結

以上是生活随笔為你收集整理的串口编程实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。