pc send instructor pc ad
#include <string.h>
#include <intrins.h> // 加入此头文件后,可使用_nop_库函数
#define MAIN_Fosc 11059200L //定义主时钟 #define Main_Fosc_KHZ (MAIN_Fosc / 1000) #include "15W4KxxS4.h"
#define Buf_Max 5
#define uint8 unsigned char
#define uint16 unsigned int
uint8 data Rec_Buf[Buf_Max];
uint8 i = ; #define S2_S 0x00
#define S2RI 0x01
#define S2TI 0x02
#define S3RI 0x01
#define S3TI 0x02
#define S4RI 0x01
#define S4TI 0x02 uint8 j = ;
uint8 m = ;
uint8 n = ;
uint8 td=;
volatile bit Flag=FALSE; uint8 uart1temp;
void delay_ms(unsigned char ms)
{
unsigned int i;
do
{
i = MAIN_Fosc / ;
while(--i) ; //14T per loop
}
while(--ms);
} void UartInit(void)
{
P_SW1|=0x80; //串口1在P1.6,P1.7
P_SW1&=0xBF;
SCON = 0x50;
S2CON = 0x50; //8位数据,可变波特率
S3CON = 0x10; //8位数据,可变波特率
S3CON &= 0x30; //串口3选择定时器2为波特率发生器
S4CON = 0x10; //8位数据,可变波特率
S4CON &= 0x30; //串口4选择定时器2为波特率发生器 AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2 } void U1SendData(uint8 ch)
{
SBUF = ch; //写数据到UART数据寄存器
while(TI == ); //在停止位没有发送时,TI为0即一直等待
TI = ; //清除TI位(该位必须软件清零)
} void U1SendString(uint8 *s)
{
while (*s) //检测字符串结束标志
{
U1SendData(*s++); //发送当前字符
}
} void SendDataByUart1(uint8 dat)
{
if(!(dat^'a')|!(dat^'b')|!(dat^'c')|!(dat^'q') ){TI=; td= dat; }
else if(td=='a')
{ S2BUF = dat;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
} else if(td=='b')
{
S3BUF = dat;
while(!(S3CON&S3TI));
S3CON&=~S3TI;
} else if (td=='c')
{
S4BUF = dat;
while(!(S4CON&S4TI));
S4CON&=~S4TI;
}
} void USART1_Tx_Puts(void)
{
if(Flag)
{
ES = ;
SendDataByUart1(uart1temp); ES = ;
Flag=FALSE;
}
}
/*
void Uart1() interrupt UART1_VECTOR
{
ES = 0;
Flag=TRUE;
if (RI )
{
RI = 0;
uart1temp = SBUF;
}
if (TI)
{
TI = 0;
}
ES = 1;
} */
void Uart1() interrupt UART1_VECTOR using
{
ES = ; // 串口1中断关闭
Flag=TRUE;
if (RI) //串行接收到停止位的中间时刻时,该位置1
{
RI = ; //清除RI位 (该位必须软件清零)
uart1temp = SBUF;
Rec_Buf[i] = uart1temp; //把串口1缓存SBUF寄存器数据依次存放到数组Rec_Buf中 i++;
if(i>Buf_Max) //接收数大于定义接收数组最大个数时,覆盖接收数组之前值
{
i = ;
}
}
if (TI) //在停止位开始发送时,该位置1
{
TI = ; //清除TI位(该位必须软件清零)
}
ES = ; // 串口1中断打开
} void ADC_config(void)
{
ADC_CONTR|=0x80; //开AD转换电源
delay_ms(); //适当延时等待AD转换供电稳定
P1ASF=0x10; //选择P1.4作为模拟功能AD使用
ADC_CONTR|=0x04; //选择P1.4作为AD转换通道输入使用
ADC_CONTR|=0x60; //AD转换速度为90个时钟周期转换一次
ADC_CONTR&=0xEF; //清AD转换完成标志
EADC=; //禁止ADC转换中断
CLK_DIV|=0x20; //ADC转换结果ADC_RES存高2位,ADC_RESL存低8位
ADC_CONTR|=0x08; //启动AD转换,ADC_START=1
} uint16 Get_ADC10bitResult(void)
{
uint16 AD_Dat=;
ADC_CONTR&=0xE7; // 将ADC_FLAG清0
//10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL
AD_Dat = ADC_RES; //将ADC_RES低2位移到应在的第9位和第10位
AD_Dat <<= ;
AD_Dat|= ADC_RESL; //将ADC_RESL的8位移到应在的低8位
ADC_CONTR|=0x08; //重新启动AD转换,ADC_START=1。
return AD_Dat;
} int main(void)
{
uint16 TempPhoto,Temp;
uint8 strPhoto[]; //打开总中断
P1M1 &= 0x3F; P1M0 &= 0x3F; //设置P1.6~P1.7为准双向口
UartInit();
delay_ms(); //初始化后延时
ES = ;
EA = ;
while()
{ USART1_Tx_Puts ( );
if( td=='q')
{ break;
}
} ADC_config();
while ()
{
memset(strPhoto, , sizeof(strPhoto)); //strTemp数组清零
TempPhoto = Get_ADC10bitResult(); //实时读取P1.7通道的AD转换结果
delay_ms();
if(TempPhoto==Temp) //如果ADC检测结果没有变化,则不更新屏显示
{
;
}
else //如果ADC检测结果发生变化,则更新屏显示内容
{
Temp=TempPhoto;
strPhoto[] = TempPhoto/+; //光强度百位
strPhoto[] = (TempPhoto%)/+; //光强度十位
strPhoto[] = (TempPhoto%)%+; //光强度个位
U1SendString(strPhoto);
U1SendString("\r\n"); //输出回车换行符,方便观察数据
}
delay_ms(); }
}
pc send instructor pc ad的更多相关文章
- Mac下找不到gl.pc和glu.pc
在用pkg-config可以用来自动查找对应库的include和lib文件,方便编译.它主要通过PKG_CONFIG_PATH和/usr/lib/pkgconfig目录下的.pc文件进行自动配置.在c ...
- 从MOV PC,PC;(或者ADDPC,PC,#4 )看ARM的三级流水线过程
3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 以前学过的51单 ...
- Linux 内核PC/104 和 PC/104+
当前在工业世界中, 2 个总线体系是非常时髦的: PC/104 和 PC/104+. 2 个在 PC-类 的 单板计算机中都是标准的. 2 个标准都是印刷电路板的特殊形式, 包括板互连的电子的/机械的 ...
- 关于ARM的PC指针(什么时候PC+8,PC+4,PC-4,PC-8)转
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. ...
- ARM获得PC指针为何PC=PC+8
http://blog.csdn.net/sddzycnqjn/article/details/7691534 R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指 ...
- day32
今日内容 1.基于TCP协议(通信循环) 2.基于TCP协议(连接循环) 3.粘包问题 4.模拟SSH实现远程执行命令 服务器端 ################################### ...
- 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...
- 让你在PC上调试Web App,UC浏览器发布开发者版
目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...
- C#--图片上传(PC端和APP)保存及 跨域上传说明
手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...
随机推荐
- 使用NPOI按照word模板文件生成新的word文件
/// <summary> /// 按照word模板文件 生成新word文件 /// </summary> /// <param name="tempFile& ...
- sed -i命令详解
[root@www ~]# sed [-nefr] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加 ...
- 虚拟机克隆之后,网卡名称从eth0变成eth1之后的解决办法
使用VMware安装了CentOS虚拟机,克隆之后使用service network restart指令来重新启动网络服务时,会看到有eth0网卡不存在的提示.出现这种现象的原因是,很多Linux d ...
- leetcode85
class Solution { public int maximalRectangle(char[][] matrix) { if(matrix == null || matrix.length = ...
- 第一篇、Python初识
1.Python文件后缀是否可以任意? 单独执行的时候没关系,但当文件需要导入(即导入模块)的时候,如果不是py后缀的,会出错. 2.执行方法 1) python +文件路径 python + fil ...
- IVideoWindow 在directshow采集链路中的使用
dshow中一个完整采集链路一般如下: Capture Device----->SampleGraber ------>Render 如果只要采集原始数据可以不用渲染链路那就如下: Cap ...
- jq动画分析1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- English-英语日常交流语句
- [Ting's笔记Day6]活用套件carrierwave gem:(1)在Rails实现图片上传功能
carrierwave是一款经典的图片上传套件,本篇的目标是先在本地端(development)的rails项目试成功gem. (预计中集的进度会练习怎么利用Amazone S3架设图片上传Host, ...
- VS2015秘钥
Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...