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)保存及 跨域上传说明
手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...
随机推荐
- VS Code 运行 TypeScript 操作指南
总结一下TypeScript开发环境用到的各种工具: Node——通过npm安装TypeScript及大量依赖包.从https://nodejs.org/下载并安装它:如果安装各种包不方便,可以将安装 ...
- Python 语言之 map/reduce
1.相关文献 大名鼎鼎的Google论文<MapReduce: Simplified Data Processing on Large Clusters> 对应的中文翻译<MapRe ...
- Excel 二维数组(数据块)旋转/翻转技巧
Excel 二维数组(数据块)旋转/翻转技巧 原创 2017-12-30 久石六 久石六 工作中遇到个问题,需要将Excel中的数据块或者说二维数组向右旋转90度,才能再加工处理.当然,不是旋转文本方 ...
- eclipse各版本及下载
附:Eclipse各个版本简介(http://zh.wikipedia.org/wiki/Eclipse) eclipse下载地址: https://www.eclipse.org/官网--右上角的I ...
- windwos下基于exp的提权
00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...
- 知识点:Mysql 基本用法之存储过程
存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...
- redis集群相关
1.主从数据库配置 为master数据库添加slave数据库只需要在从数据库的配置中添加配置: slaveof 主数据库地址 主数据库端口 当然,也可以通过命令: redis-server --por ...
- django之两个使用模板的例子
from django.db import models # Create your models here. class Book(models.Model): title=models.CharF ...
- shell:实现linux服务器资源监控并发送告警邮件
1.安装方式 wget http://10.8.225.126/wsmonitor/install.sh;sh install.sh test@test.com 2.install.sh #!/bin ...
- leetcode208
class TrieNode { public: // Initialize your data structure here. TrieNode() { words=; prefixs=; ;i&l ...