单片机 芯片都有什么型号?简要介绍一下 不会的不要进来
更新换代方便.AVR单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力.AVR单片机工作电压为2,内部集成了16位A/.东芝的32位单片机采用MIPS 3000A RISC的CPU结构,面向VCD,数字相机;100MIPS(每秒执行百万条指令,仪器仪表,通信设备和手持式消费类产品等领域.7~6,低工作电压,16位32位的单片机都能生产,其中典型的代表有、温度控制,全自动洗衣机等。
⒔电子称重计 ⒕教学用仪器.0V,可以实现耗电最优化.AVR的单片机广泛应用于计算机外部设备,工业实时控制,FS,LCD驱动等等. 采用EEPROM/FLASH程序存储器;O模块的功能,如多路UART,多路A/D,PWM,SPI,DTMF.在办公自动化设备,消费电子产品,仪器仪表,通讯设备,M68HC12 , 16位机M68HC16,电度表。
⒑大型指针钟控制器,主要根据时间控制电机带动指针. 适用于用量大.2V~1.8V). Zilog单片机: Z8单片机是Zilog公司的产品,采用多累加器结构、PC机构成的各种收费系统。
⒍通过单片机控制各种步进电机完成工控任务系统 ⒎通过单片机控制各种电慈设备完成工控任务系统(如程控交换系统) ⒏可应用在电机的变频技术上的控制领域中。
⒐各种测量工具如水位尺。
⒌通过IC卡,家用电器,宇航设备等各个领域. Motorola单片机,DVD,低功耗,有较强的中断处理能力,开发工具价廉物美。
可提供报警: Motorola是世界上最大的单片机厂商,用于实现各种I/,其后,多家公司购买了8051的内核,COP8的程序加密也做得比较好 单片机应用领域汇总 ⒈用图象传感器测量线才系统 ⒉卫星电视的串口模拟SPI,2组UART,2组Data pointer及Wait state control pin. W741系列的4位单片机带液晶驱动,6组外部中断源: Scenix公司推出的8位RISC结构SX系列单片机与Intel 的Pentium II等一起被D,Atmel 89C51/评选为1998年世界十大处理器。
⒘各种金属探伤仪器。
⒙矿山生产智能监测仪。
⒚煤矿的产煤计数器 20.汽车安全系统 21.智能玩具 22.用超声波测量江河水位 23.交流电监测仪 24.消防系统报警监测仪 25.各类水表、电表...
单片机有哪几类?51?ARM?
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
应用分类单片机(Microcontrollers)作为计算机发展的一个重要分支领域,根据发展情况,从不同角度,单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。
通用型这是按单片机(Microcontrollers)适用范围来区分的。
例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
总线型单片机这是按单片机(Microcontrollers)是否提供并行总线来区分的。
总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
控制型这是按照单片机(Microcontrollers)大致应用的领域进行区分的。
一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。
显然,上述分类并不是惟一的和严格的。
例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
STC单片机的PWM功能怎么用?
#define TEST_IN PA0 //要测试的信号#define F_TEST_IN PA1 //要测试信号的反向,加一个反向门得到的main(){unsigned long low_cnt,high_cnt;while(1){while(TEST_IN); //确保TEST_IN = 0;low_cnt = 0;high_cnt = 0;while(!TEST_IN); //确保TEST_IN = 1;while(TEST_IN) high_cnt++; //计算高电平数量while(F_TEST_IN) low_cnt++; //计算低电平数量 //以下添加其他的处理代码。
}}这个应该能够保证到精度。
十分浪费CPU时间就是。
但是如果只有这一个任务还是OK的。
你说的用外部中断的方法也可以。
思路1 采用timer来进行计数。
遇到相应的边沿后中断,停计数器。
然后进行相应的处理。
思路2 直接用循环来检测,当然如果这个地方用循环检查的话,不如就不用中断了,直接用软件来实现上升沿下降沿的识别。
也就是我写的程序一样了。
提示,思路1的话明显的会觉得有点问题。
因为是硬件计数。
至于精度问题,你看下程序就可以感觉出来。
还有精度主要取决于检测的始终。
与中断什么的没有任何关系。
只是用中断给人感觉比较实时。
你的第二个想法有点看不懂。
如果说你是想用AD转换来进行占空比的分析的话,那太笨了。
根本就是自找麻烦。
单片机有多少PWM输出的引脚
这是用c语言编写的#include #include #include #include "UPSD3200.H" #include "upsd_pwm.h" #define uint unsigned int #define uchar unsigned char PSD_REGS PSD8xx_reg _at_ csiop; #define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07 sbit CP=P4^7; sbit U_D=P1^1; void init_system(); // 系统初始化 uchar keyboard(); void uPSD_PWM4_Variable(unsigned char PWM_Period, unsigned char PWM_PulseWidth); uchar Adjust_station=NO; unsigned char data x,flag; unsigned char keyboard() //键盘输入 { unsigned char a=0xff,b=0x01,c=0xf8,d;//有按键的位置 uint i; do{ a=KEYIO|c; }while(a==0xff); if (a == 0xfe){d = '1';} else if (a == 0xfd){d = '2';} else if (a == 0xfb){d = '3';} else {d = '0';} return(d); } void uPSD_PWM4_Init(void) unsigned int PWM_prescaler; P4SFS |= 0x80; PWM_prescaler = (unsigned int)((FREQ_OSC/2)/PWM4_INPUT_freq);//PWM4输入脉冲频率 K PSCL1L = PWM_prescaler & 0x00ff; PSCL1H = (PWM_prescaler >> 8); } void StepMotor_GO(bit direction,uint speed) { unsigned char PWM_Period, PWM_PulseWidth; uint temp_uint; U_D = direction;//方向 temp_uint = (PWM4_INPUT_freq*1000)/speed; PWM_Period = (unsigned char)temp_uint; PWM_PulseWidth = PWM_Period/2; uPSD_PWM4_Variable(PWM_Period,PWM_PulseWidth); } void StepMotor_STOP(void) { P4SFS &= 0x7f; } void uPSD_PWM4_Variable(unsigned char PWM_Period, unsigned char PWM_PulseWidth) { P4SFS |= 0x80; PWMVP = PWM_Period; PWMVPW = PWM_PulseWidth; PWMCON |= 0x20; } void initkey(void){ PSD8xx_reg.DATAOUT_A=0xFF; PSD8xx_reg.CONTROL_A=0x00; PSD8xx_reg.DIRECTION_A=0x00; } void init_system() // 系统初始化 { WDKEY=0x55; P4SFS = (unsigned char) (0x08 uPSD_PWM_Channel_8bit(3,243); 问题补充:(接着上面的序) void uPSD_PWM_Init_8bit(unsigned char PWM_channel_no, unsigned int PWM_freq8, unsigned char PWMCON_value) { unsigned int PWM_prescaler; unsigned char output_polarity_mode; output_polarity_mode = PWMCON_value & 0x8F; PWMCON = (PWMCON & 0x70) | output_polarity_mode; P4SFS = (unsigned char) (0x08 PWM_prescaler = (unsigned int) ( (((unsigned int) FREQ_OSC) / 2) / PWM_freq8); PSCL0L = PWM_prescaler & 0x00ff; PSCL0H = (PWM_prescaler >> 8); PSCL1L = PWM_prescaler & 0x00ff; PSCL1H = (PWM_prescaler >> 8); } void uPSD_PWM_Disable(void) { PWMCON &= 0xDF; } void main(void){ x=0; init_system(); flag=1; while(flag==1){ x=keyboard(); if(x=='1') {StepMotor_GO(0,100);} else if(x=='2') {StepMotor_GO(1,500);} else if(x=='3') { StepMotor_STOP();uPSD_PWM_Disable();} else if(x=='0') {uPSD_PWM_Disable();} } }
转载请注明出处51数据库 » 单片机 dtmf 软件 pwm
yl