传感器实验报告(第二次)

2024-06-04 06:18

本文主要是介绍传感器实验报告(第二次),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

6.5外部中断实验

一.实验目的

1.掌握CC2530的外部中断寄存器设置;
2.掌握外部中断函数程序的编程方法。

二.基础知识

这里写图片描述
当按键未按下时,P0.4的电平为3.3V;当按键按下时,P0.4的电平为0V。

三.实验代码
#include "ioCC2530.h"      void delay(void)        //延迟函数
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} #pragma vector=P0INT_VECTOR      //定时器3中断函数
__interrupt void P0_INT(void){if(P0IFG > 0){P0IFG = 0;           //清中断标志P0_0=~P0_0;P2_0=~P2_0;   }P0IFG = 0;
}void main( void )
{P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_0 = 1; P2_0 = 1;   //熄灭LEDP0IEN = 0x10;     //P0.4开中断PICTL = 0x11;     //P0口下降沿触发中断P0IFG = 0;        //清中断标志 P0IE  = 1;        //P0口开中断EA = 1;       //开总中断while(1);
} // end of main()
四.实验现象

烧写程序后,复位。可看到两个小灯常亮;按下开关键,两个小灯均熄灭;松开按键,小灯恢复常亮。


6.6UART串口通信实验

一.实验目的

1.掌握CC2530的UART串口寄存器设置;
2.掌握UART串口中断函数程序的编程方法。

二.基础知识

UART,即通用异步串行通信方式。数据一位接着一位地传送。数据的各不同位可使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

三.实验代码
#include "ioCC2530.h"     char uart_buffer;void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = *Data++;   while(UTX0IF == 0);UTX0IF = 0;}
}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = Data;   while(UTX0IF == 0);UTX0IF = 0;}
}#pragma vector=URX0_VECTOR   //uart0中断函数
__interrupt void uart0(void){URX0IF = 0; //清中断标志P0_0=~P0_0;uart_buffer = U0DBUF;//UartTX_Send_String("welcome",10);UartTX_Send_Data(uart_buffer,1);
}void main( void )
{unsigned char buf[8];P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_0 = 1; P2_0 = 1;       //熄灭LEDCLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XSOC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器PERCFG = 0x00;              //位置1 P0 口P0SEL = 0x3c;               //P0 用作串口U0CSR |= 0x80;              //UART 方式U0GCR |= 10;                //baud_e = 10;U0BAUD |= 216;              //波特率设为57600UTX0IF = 1;U0CSR |= 0X40;              //允许接收IEN0 |= 0x84;               //开总中断,接收中断buf[0] = '\t';while(1){P2_0=~P2_0;delay();if(uart_buffer == 0x01){UartTX_Send_String("welcome",7);UartTX_Send_String(&buf[0],1);}}
} // end of main()
四.实验现象

这里写图片描述


6.7AD转换实验3

一.实验目的

1.掌握CC2530的AD转换寄存器设置;
2.掌握AD转换函数程序的编程方法。

二.基础知识

CC2530内部有一个温度传感器,用来作AD输入。数字量通过串行接口输出到电脑显示器。

三.实验代码
#include "ioCC2530.h"     
#define uint8 unsigned char 
#define uint16 unsigned intchar uart_buffer;void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} uint16 ReadAdValue(uint8 SREF,uint8 SDIV,uint8 Channel)
{  uint16 AdcValue;if(Channel == 0xe){//片内温度到ADC_SOCTR0 = 1;ATEST = 1;}else{TR0 = 0;ATEST = 0;} ADCCON3 = (SREF<<6)|(SDIV<<4)|Channel;  ADCCON1 &= 0x30; //停止A/DADCL &= 0x00; //EOC清零ADCH &= 0x00; //EOC清零ADCCON1 |= 0x40; //启动A/D;  while(!(ADCCON1 & 0x80));          //等待AD转换结束 AdcValue = ADCH;AdcValue = ((AdcValue<<6)+(ADCL >> 2));return AdcValue;
}void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = *Data++;   while(UTX0IF == 0);UTX0IF = 0;}
}void UartTX_Send_Data(char Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = Data;   while(UTX0IF == 0);UTX0IF = 0;}
}#pragma vector=URX0_VECTOR   //uart0中断函数
__interrupt void uart0(void){URX0IF = 0; //清中断标志P0_0=~P0_0;uart_buffer = U0DBUF;//UartTX_Send_String("welcome",10);//UartTX_Send_Data(uart_buffer,1);
}void main( void )
{unsigned int temp;unsigned char buf[8];temp = 0;P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_0 = 1; P2_0 = 1;       //熄灭LEDuart_buffer = 0;CLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XSOC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器PERCFG = 0x00;              //位置1 P0 口P0SEL = 0x3c;               //P0 用作串口U0CSR |= 0x80;              //UART 方式U0GCR |= 10;                //baud_e = 10;U0BAUD |= 216;              //波特率设为57600UTX0IF = 1;U0CSR |= 0X40;              //允许接收IEN0 |= 0x84;               //开总中断,接收中断while(1){P2_0=~P2_0;if(uart_buffer == 0x01){uart_buffer = 0;  temp = ReadAdValue(0,3,0xe);temp = ((temp) >> 4) - 315;     //计算转换结果  buf[0] = (((unsigned char)temp)/10)+'0';buf[1] = (((unsigned char)temp)%10)+'0';       buf[2] = 0xa1;buf[3] = 0xe6;buf[4] = '\t';UartTX_Send_String(&buf[0],5);}}
} // end of main()
四.实验现象

这里写图片描述


6.10睡眠定时器唤醒实验

一.实验目的

1.掌握CC2530的睡眠定时器寄存器设置;
2.掌握睡眠定时器唤醒程序的编程方法。

二.基础知识

CC2530的睡眠定时器是一个24位的计数器,用作唤醒中断。

三.实验代码
#include "ioCC2530.h"      void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} void SET_POWER_MODE(unsigned char mode)    //设置省电模式,mode:0-3
{ if(mode < 4) { SLEEPCMD &= 0xfc;SLEEPCMD |= mode;PCON |= 0x01; asm("NOP"); }elsePCON = 0;
}#pragma vector=P0INT_VECTOR    //外部中断函数
__interrupt void P0_INT(void){if(P0IFG > 0){P0IFG = 0;  unsigned i;for(i=0;i<5;i++){P0_0 = ~P0_0;delay();}}P0IFG = 0;
}void Init_SLEEPCMD_TIMER(void)
{STIE = 1;STIF = 0;
}#pragma vector=ST_VECTOR    //睡眠中断函数
__interrupt void ST_INT(void){STIF = 0;unsigned i;for(i=0;i<5;i++){P2_0 = ~P2_0;delay();}
}void addToSLEEPCMDTimer(unsigned int sec)
{long int SLEEPCMDTimer = 0;SLEEPCMDTimer |= ST0;SLEEPCMDTimer |= (long int)ST1 << 8;SLEEPCMDTimer |= (long int)ST2 << 16;SLEEPCMDTimer += ((long int)sec * (long int)32768);ST2 = (char)(SLEEPCMDTimer >> 16);ST1 = (char)(SLEEPCMDTimer >> 8);ST0 = (char) SLEEPCMDTimer;
}void UartTX_Send_Data(char Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = Data;   while(UTX0IF == 0);UTX0IF = 0;}
}void main( void )
{P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_0 = 1; P2_0 = 1;   //熄灭LEDP0IEN = 0x10;PICTL = 0x11;P0IFG = 0;P0IE  = 1;CLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XSOC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器P0IEN = 0x10;PICTL = 0x11;P0IFG = 0;P0IE  = 1;EA = 1;Init_SLEEPCMD_TIMER();//SET_POWER_MODE(2);   //进入PM2省电模式while(1)            //等待睡眠定时器中断唤醒{addToSLEEPCMDTimer(5);  //5秒唤醒一次SET_POWER_MODE(2);   //进入PM2省电模式}
} // end of main()
四.实验现象

烧写程序后,复位。按键一次后,一个小灯周期的闪烁。


6.11看门狗定时器实验

一.实验目的

1.掌握CC2530的看门狗定时器寄存器设置;
2.掌握看门狗定时器程序的编程方法。

二.基础知识

看门狗是在CPU在软件中跑飞情况下的一种恢复方式,当软件在选择时间间隔内未清楚看门狗,看门狗就会复位系统。

三.实验代码
#include "ioCC2530.h"     unsigned int counter;void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} void Init_Watchdog(void)
{WDCTL = 0x00;       //时间间隔一秒,看门狗模式WDCTL |= 0x08;      //启动看门狗
}
void WatchDog(void)  //喂狗函数
{WDCTL = 0xa0;WDCTL = 0x50;
}void main( void )
{P0DIR |= 0x01;  //设置P0.0为输出方式;P0.4和P0.5为输入方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_0 = 1; P2_0 = 1;       //熄灭LEDcounter = 0;CLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XSOC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器Init_Watchdog();EA = 1;     //开总中断delay();delay();delay();while(1){WatchDog();   //喂狗P0_0=~P0_0;}
} // end of main()
四.实验现象

烧写程序后,复位。此时两个灯均不亮,过一秒后两个灯亮起,且为长亮。此时复位,两个灯熄灭,过一秒再次常亮。

这篇关于传感器实验报告(第二次)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029296

相关文章

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

人体红外传感器简介

人体红外传感器的工作原理是利用热释电效应,将人体发出的特定波长的红外线转化为电信号,从而实现对人体的检测和感知。               具体来说,人体红外传感器主要由滤光片、热释电探测元和前置放大器组成。滤光片的作用是使特定波长的红外辐射选择性地通过,到达热释电探测元,而在其截止范围外的红外辐射则不能通过。热释电探测元是传感器的核心元件,当它受到非恒定强度的红外光照射时,会产生

Linux操作系统 :文件管理(实验报告)

一、实验目的 熟练掌握Shell特性和文件管理命令的使用方法 二、实验环境 硬件:PC电脑一台,网络正常; 配置:win10系统,内存大于8G  硬盘500G及以上 软件:VMware、Ubuntu16.04、 三、实验内容 Linux的文件管理 四、实验步骤 1、以自己姓名的英文缩写xxx来创建一个用户,并设置密码为12345678,进入用户。 程序运

胎压监测方案传感器技术分析

DSH700B 是一款常用于胎压监测方案的传感器,它具有以下一些特点和优势:一、高精度测量 DSH700B 传感器能够实现高精度的胎压和温度测量。它采用先进的传感技术,能够准确地感知轮胎内部的压力变化和温度变化,并将这些数据以准确的数值形式输出。这对于确保胎压监测的准确性至关重要,能够及时发现轮胎气压异常,避免因胎压过高或过低而导致的安全隐患。二、稳定性和可靠性 该传感器在设计上注重稳定性和可靠性

KEYSIGHT U2020 X系列 USB峰值和均值功率传感器

​ _是德(KEYSIGHT) _ U2020 X系列  USB峰值和均值功率传感器 苏州新利通仪器仪表 U2020 X 系列功率传感器得到 Keysight BenchVue 软件的支持。使用 BenchVue 软件,您无需编程便可轻松控制功率计记录数据,并以各种形式显示测量结果。 只需将传感器连接至安装了 BenchVue BV0007B 功率计/传感器控制与分析软件的计算

土壤湿度传感器工作原理

土壤湿度传感器工作原理是通过测量土壤的介电常数、电阻、电容等物理参数来确定土壤的湿度。                                                                常见的土壤湿度传感器工作原理有以下几种: 频域反射原理(FDR):通过测量电磁波在土壤中传播的频率来确定土壤的介电常数,从而计算出土壤的湿度。 时域反射原理(TDR):

触摸传感器的工作原理

触摸传感器的工作原理因类型而异,常见的触摸传感器类型包括电容式、电阻式、红外式和超声波式等。以下是一些常见触摸传感器的工作原理: 电容式触摸传感器:通过检测触摸点与传感器电极之间的电容变化来确定触摸位置。当手指触摸屏幕时,会改变电极之间的电容,从而被传感器检测到。  电阻式触摸传感器:由两层导电材料组成,中间有微小的间隔。当手指触摸屏幕时,两层导电材料会接触,从而改变电阻值,被传

光电红外传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图  2.引脚描述 三、程序设计 main.c文件 HW.h文件 HW.c文件 四、实验效果  五、资料获取 项目分享 一、介绍         光电传感器对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,指

传感器模块查询表

包含内容:原理图 驱动代码 关注不迷路,需求快查询 时间传感器模块2024.09.01HX711称重模块

SPR系列单点激光雷达测距传感器|模组之CAN-OPEN软件调试说明

SPR系列单点激光雷达测距传感器|模组利用激光束的时间飞行原理来测量距离。它们发射出一个脉冲激光,并测量激光从传感器发射到击中物体并返回的时间来计算距离。 SPR系列单点激光雷达测距传感器|模组在测量精度要求较高的应用中常被使用,应用范围广泛,可以用于距离测量、障碍物检测、定位导航、环境感知等诸多方面,为自动化、机器人技术和智能系统提供重要的数据支持。 SPR系列单点激光雷达测距传感器|模组,