单片机

阅读 / 问答 / 标签

在上位机上用串口调试助手发送一个字符x,单片机收到字符后返回给上位机“I get x”,串口波特率为9600,

p30=0;干什么用?另外你用单片机直接发个I get 给PC,看有没有全部收到。

关于单片机做电子钟的问题

#include "reg51.h"#define uchar unsigned charsbit RW=P3^1;sbit RS=P3^0;sbit E=P3^2;bit at=0;//sbit busy_bit=P1^7;uchar code shen[]={"CLOCK!"};uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};uchar dispbuf[8],h,m,s,counter;void delay(){ uchar i; for(i=0;i<255;i++);}/*******写命令**********/void lcd_wmc(uchar i){ P0=i; RS=0; RW=0; E=0; delay(); E=1;}/*******写数据***********/void lcd_wmd(uchar i){ P0=i; RS=1; RW=0; E=0; delay(); E=1;}/*******初始化液晶*******/void lcd_init(){ uchar i; lcd_wmc(0x01); lcd_wmc(0x38); lcd_wmc(0x0c); lcd_wmc(0x06); lcd_wmc(0xc9); for(i=0;i<6;i++) lcd_wmd(shen[i]); lcd_wmc(0xc0);}/*******更新缓冲区子程序*******/void newbuf(){ dispbuf[0]=s%10; dispbuf[1]=s/10; dispbuf[3]=m%10; dispbuf[4]=m/10; dispbuf[6]=h%10; dispbuf[7]=h/10;}/*******显示子程序**********/void disp(uchar dispadd){ uchar tmp; lcd_wmc(dispadd); tmp=dispbuf[7]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[6]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[5]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[4]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[3]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[2]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[1]; tmp=word[tmp]; lcd_wmd(tmp); tmp=dispbuf[0]; tmp=word[tmp]; lcd_wmd(tmp); }/*********************键盘子程序***********************/uchar keypro(void){ uchar scanl,scanh; P1=0xf0;//先将所有行线拉低 if((P1&0xf0)!=0xf0) //如果列线有变化 { delay();//延迟一段时间。 if((P1&0xf0)!=0xf0)//如果此时此刻列线还有变化,说明确实有按键按下 { scanl=0xfe;用变量保存下第一次发送的扫描码1111,1110 while((scanl&0x10)!=0)如果四个行线被完整扫描一次还没有完成,就进入循环,继续扫描下一行 { P1=scanl; //给P1口赋扫描码,每次只拉低一行 if((P1&0xf0)!=0xf0) //如果判断为真,则说明找到了按键按下的行 { scanh=(P1&0xf0)|0x0f; //计算识别码 return (~scanh)+(~scanl); 返回识别码,识别码是根据上一条语句的算法计算好的,每个识别码对应一个按键,一共有16个识别码。 } else scanl=(scanl<<1)|0x01; //否则依次将第二,第三,第四行拉低 } } } return 0;//没有按键 按下 返回0}/********************时间调整子程序********************/void adjustime(){ uchar k; static uchar add; k=keypro(); switch(k) { case 0x88: if(!at){add=0xc1;EA=0;lcd_wmc(0xc1);lcd_wmc(0x0f);at=1;} else {lcd_wmc(0xc0);lcd_wmc(0x0c);at=0;EA=1;} break; case 0x48: if(at) { if(add==0xc1){add=0xc7; lcd_wmc(add);} else {add=add-3;lcd_wmc(add);} } break; case 0x28: if(at) { if(add==0xc7) {add=0xc1;lcd_wmc(add);} else {add=add+3;lcd_wmc(add);} } break; case 0x18: if(at) { if(add==0xc1) h++; if(h==24) h=0; if(add==0xc4) m++; if(m==60) m=0; if(add==0xc7) s++; if(s==60) s=0; newbuf(); disp(0xc0); lcd_wmc(add); } break; default: break; } if(k!=0) { while((P1&0xf0)!=0xf0) P1=0xf0; }}/*********************初始化子程序**********************/void init(){ TMOD=0x01; TH0=0x4c; TL0=0x00; EA=1; ET0=1; TR0=1; counter=0; h=12;m=0;s=0; dispbuf[2]=10; dispbuf[5]=10;}/***************************主程序************************/void main(void){ init(); lcd_init(); while(1) { adjustime(); if(!at) { //闪烁 if(counter<10) { dispbuf[2]=10; dispbuf[5]=10; } else { dispbuf[2]=11; dispbuf[5]=11; } //更新显示缓冲区及调用显示程序 if(counter==0) { newbuf(); disp(0xc0); } else if(counter==10) disp(0xc0); } }}/*************************定时器0的中断**********************/void Time0() interrupt 1 using 2 //再次强调中断子程序执行时间越短越好{ TH0=(65536-46075)/256; TL0=(65536-46075)%256; counter++; if(counter==20) { s++; counter=0; if(s==60) { m++; s=0; if(m==60) { h++; m=0; if(h==24) h=0; } } }}

单片机中@(unsigned ) &statues *8+0; 中*8怎么理解的?求解

可能是求位地址吧。

单片机汇编语言中 CY AC OV 分别是什么意思?

CY 应该是进位OV应该是溢出AC 不知道,交流电?

单片机中flow是什么意思

单片机汇编语言中CY(PSW.7)是进位或借位,来源于最近一次算术指令或逻辑指令执行结果。AC(PSW.6)是辅助进位或辅助借位,用于BCD码的十进制调整运算。OV(PSW.2)是溢出位。在执行算术指令时,指示运算是否产生溢出。

单片机inc是什么意思

是指定的寄存器加1的意思

单片机问题:INC是什么指令?功能是什么?

INC 属于算术运算类指令 功能为: 加1指令 使操作数内容增1例如: INC R0 ;功能使R0内容加1 可以完成修改指针的任务。 满意就选满意回答吧

单片机这题Inc dptr这步是干嘛的?有什么用?

INC A 累加器中的数据值加1,这是8位寄存器。 INC DPTR,数据指针值加1,这是16位寄存器。

PIC单片机POR 和 BOR 时的值

关注这个问题

sys_init()在单片机中什么意思

字面含义是系统初始化,具体内容要看这个函数的详细语句

51单片机init什么意思

一般初始化函数的函数名都喜欢这样起名。初始化作用如楼上说的。

51单片机声音报警SPEAKER

这是三极管基极电阻太大,流入三极管基极的电流小了声音也会变小 把阻值改小试试。

单片机的INT0是什么意思?

一般是指外部中断0,Interrupt 0。

用keil做单片机学习的时候关于MULTIPLE PUBLIC DEFINITIONS错误的问题

是的,重复了,如果有两个C文件,一是函数名不能重复,二是只有一个主函数main,你两个C文件,我想肯定是每个里面都有main吧。

简易数字温度计制作(不用单片机)

#include<stdio.h>#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit CLK_164=P0^4;//数码管显示控制芯片74LS164时钟引脚sbit DTAT_164=P0^5;//数码管显示控制芯片74LS164 ABsbit CS=P1^5;//AD转换sbit CLK=P1^2;//AD转换sbit DIN=P1^3;//AD转换sbit DOUT=P1^4;//AD转换sbit FMQ=P3^6;//报警sbit KEY_PIN=P3^4;//按键sbit sda=P2^5; //DS1307sbit sclk=P2^4;//DS1307uchar LED_TAB[7]={0x0e,0x0d,0x0b,0x07,0x0f}; //0,1,2,3位依次显示,0x0f为全灭uchar DISP_SAVE[7];uchar BCD_TAB[11]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0xff};//数码管显示的值:0,1,2,3,4,5,6,7,8,9;oxff为不显示值//uchar CCBD_TAB[10]={0x31,0xFD,0x91,0x61,0xF5,0x11,0xC1,0x63,0xe3};uchar D1307[7];uchar cotot=0;uchar temp5,count_1,temp6;uchar JP1=0;uint temper;void delay(uint tt) //延迟函数{ uchar i; for(;tt>0;tt--) { for(i=0;i<2;i++); }}/*********************************************************************************************/ /***************************************************************************** 起始信号DS1307*****************************************************************************/void iicstart(void){ sclk=0; //总线放空,以便更改总线数据 sda=1; //发送I2C总线起始条件的数据信号1以便总线使能时产生下降沿 sclk=1; //发送I2C总线起始条件的时钟信号 delay(1); sda=0; //产生下降沿 总线传输开始 delay(1); sclk=0; //时钟线从高到低一次跳变,总线放空 准备传输数据}/***************************************************************************** 结束信号DS1307*******************************************************************************/ void iicstop(void){ sclk=0; //发送I2C总线时钟信号放空 sda=0; //发送I2C总线停止条件的数据信号0以便产生上升沿 delay(1); sclk=1; //时钟线从低到高一次跳变 总线 使能 sda=1; //发送I2C总线数据信号产生上升沿 终止传送 delay(1); sclk=0; //发送I2C总线时钟信号放空}/************************************************************************************ 检测应答信号DS1307***********************************************************************************/uchar upcheck(void){ uchar i; sclk=0; sda=1; //数据线升高,以便捕捉相应信号,(相应信号:拉低数据线) sclk=1; // 主机放出一脉冲,等待捕捉相应信号 if(sda==1) i=0; else { i=1; count_1++; } sclk=0;//无论传送是否正确,都需放空总线,以备后用 return(i);//i为应答信号标志位}/********************************************************************************* 发送应答信号和非应答信号DS1307*********************************************************************************/void sendcheck(void)//应答信号{ sclk=0; sda=0; //数据线保持拉低,时钟线发生一次从高低的跳变 发送一个应答信号 sclk=1; delay(1); sclk=0; }void senducheck(void)//非应答信号{ sclk=0; sda=1; //数据线保持高,时钟线发生一次从高低的跳变 没有应答 sclk=1; delay(1); sclk=0;}/***********************************************************************************写入一个字节**字节内容:addr*******************************************************************************/void writeiic(uchar addr){ uchar temp1,i; temp1=addr; sclk=0; //总线放空 for(i=0;i<8;i++) //发送八位 { if((temp1&0x80)==0)//提取高位的数据,由高位到低位逐步提出字节位,发送到总线上 sda=0; else sda=1; sclk=1; //总线使能,发送总线数据 delay(2); sclk=0; //总线1位传送完成,总线放空 temp1=temp1<<1;//左循环以便输出下一位 } temp5=upcheck();//检测应答信号}/********************************************************************************************读取一个字节**读取内容:addr**********************************************************************************************/uchar read(uchar addr){ uchar temp1,temp2,i; temp1=addr; sclk=0; for(i=0;i<8;i++) { if((temp1&0x80)==0)//提取高位的数据,由高位到低位逐步提出字节位,发送到总线上 sda=0; else sda=1; sclk=1; delay(2); sclk=0; temp1=temp1<<1; } temp5=upcheck();//检测应答信号 sclk=0; //总线放空 sda=1; for(i=0;i<8;i++) //读入八个位 { temp2=temp2<<1; // 读入数据左循环 sclk=1; //时钟做一次从低到高的跳变 可以接收一位数据 delay(2); if(sda==1) temp2=temp2|0x01; // 将数据编入变量temp2 sclk=0; //总线放空 } senducheck();//发送非应答信号 return(temp2); //反馈接收到的信息}void read1(uchar addr,uchar cc,uchar *chn){ uchar temp1,temp2,temp3,i; temp1=addr; temp3=cc;///////////////////////////////////////////// sclk=0; //写入 for(i=0;i<8;i++) { if((temp1&0x80)==0) sda=0; else sda=1; sclk=1; delay(2); sclk=0; temp1=temp1<<1; } temp5=upcheck();///////////////////////////////////////////// for(temp1=0;temp1<temp3;temp1++) { sclk=0; sda=1; for(i=0;i<8;i++) //读入八个位 { temp2=temp2<<1; sclk=1; delay(2); if(sda==1) temp2=temp2|0x01; sclk=0; } chn[temp1]=temp2; temp2=0x00; if((temp3-temp1)==1) senducheck();//发送非应答信号 else sendcheck();//发送应答信号 }}/****************************************************************************************/void QU_write(uchar lx,uchar ly,uchar lz){ iicstart();//开始信号 writeiic(lx);//呼叫芯片D1307,并定义为 写 动作(0XD0) writeiic(ly);//发送地址 writeiic(lz);//发送数据 iicstop();//结束信号}void READ_1307_DISP(void)//读取DS1307的寄存器{ uchar i; uchar j; j=D1307[0]; //J=0 delay(1); iicstart();//启动传送 writeiic(0xd0);//呼叫芯片D1307,并定义为 写 动作 delay(1); writeiic(0x00); //发送起始地址并检测响应 delay(1); iicstart(); //启动总线 read1(0xd1,3,D1307); //呼叫芯片D1307并定义为写动作(0XD1);循环写入数据的次数(3);将写入的数据保存在数组D1S07中 iicstop(); //关闭总线 if(j!=D1307[0])//接受到数据 { JP1=!JP1; //JP1=1 } i=D1307[2]&0x0f;//BCD码转换 if(JP1==0) { DISP_SAVE[1]=BCD_TAB[i]&0xfe;//时间显示的十位并加点 } else { DISP_SAVE[1]=BCD_TAB[i]; } i=(D1307[2]&0x70)>>4;//BCD码转换 DISP_SAVE[0]=BCD_TAB[i];//时间显示的个位 i=D1307[1]&0x0f;//BCD码转换 DISP_SAVE[3]=BCD_TAB[i];//时间显示的千位 i=(D1307[1]&0x70)>>4;//BCD码转换 DISP_SAVE[2]=BCD_TAB[i];//时间显示的百位}/**********************************************************************************************/uint MCP3204_READ(uchar lx)//AD转换{ uchar i=0,j=0; uchar temp1=0,temp2=0; uint temp3=0; CS=1; CLK=0; delay(5); CS=0; j=lx; for(i=0;i<5;i++) { if((j&0x80)==0x80) { DOUT=1; } else { DOUT=0; } CLK=0; delay(5); CLK=1; j=j<<1; } CLK=0; delay(5); CLK=1; delay(5); CLK=0; for(i=0;i<4;i++) { temp1=temp1<<1; CLK=1; delay(5); CLK=0; if(DIN==1) { temp1=temp1|0x01; } } for(i=0;i<8;i++) { temp2=temp2<<1; CLK=1; delay(5); CLK=0; if(DIN==1) { temp2=temp2|0x01; } } CS=1; temp3=temp1; temp3=(temp3<<8)|temp2; return temp3;}/********************************************************************************/void get_key(void) //按键程序{ if(KEY_PIN==0) { delay(30);//消抖 if(KEY_PIN==0) { while(KEY_PIN==0);//松手检测 cotot=!cotot; } }}/*************************************************************************************/void write_164(uchar lx)//控制数码管的显示{ uchar i,j; j=lx; for(i=0;i<8;i++) { CLK_164=0; if((j&0x01)==0x01)//检测J的最后一位是否为1 { DTAT_164=1;// } else { DTAT_164=0;// } delay(3); CLK_164=1; j=j>>1; delay(2); }}void disp_all(void){ uchar i,j; for(i=0;i<20;i++)//大约1sec跳闪一次 { for(j=0;j<5;j++) { P0=0X0F;//数码管关闭 write_164(DISP_SAVE[j]);//数码管显示的内容 P0=LED_TAB[j];//数码管动态显示 delay(100); P0=0X0F;//数码管关闭 } } write_164(0xff);}void main(void){ uchar lop; uint teo; FMQ=0;//关闭报警 KEY_PIN=1;//按键未按下 QU_write(0xd0,0x00,0x00);//呼叫芯片D1307并定义为写动作;向秒寄存器写入;数据0 QU_write(0xd0,0x01,0x16);//呼叫芯片D1307并定义为写动作;向分寄存器写入;数据16 QU_write(0xd0,0x02,0x03);//呼叫芯片D1307并定义为写动作;向时寄存器写入;数据3 while(1) { get_key();//检测按键 if(cotot==0)//按键未被按下显示温度 { temper=MCP3204_READ(0xc0); if(temper>2700)//温度零上时 { temper=temper-2600; if(temper>teo)//teo此时为0 { teo=temper; } if(teo>400) { teo=teo-100; } lop=teo/1000;//LOP取千位 DISP_SAVE[0]=BCD_TAB[lop];//数码管显示十位 lop=(teo%1000)/100;//LOP取百位 DISP_SAVE[1]=BCD_TAB[lop];//数码管显示个位 lop=(teo%100)/10;//LOP取十位 DISP_SAVE[2]=BCD_TAB[lop]&0xfe;//数码管显示百位并显示点 lop=teo%10;//LOP取个位 DISP_SAVE[3]=BCD_TAB[lop]; //数码管显示千位 } else if(temper<2660)//温度零下时 { temper=0; teo=0; lop=teo/1000; DISP_SAVE[0]=BCD_TAB[lop];//数码管显示0 lop=(teo%1000)/100; DISP_SAVE[1]=BCD_TAB[lop];//数码管显示0 lop=(teo%100)/10; DISP_SAVE[2]=BCD_TAB[lop]&0xfe;//数码管显示0并加点 lop=teo%10; DISP_SAVE[3]=BCD_TAB[lop];//数码管显示0 } if(teo>300)//如果温度超过30° { FMQ=1;//报警 } else { FMQ=0;//停止报警 } } else if(cotot==1)//按键被按下显示时间 { READ_1307_DISP();//读取实时时间 } disp_all();//显示时间或者温度 }}

AVR单片机,MEGA32和MEGA328区别是什么???

Key Parameters 前者引脚多 后者频率高 去ATMEL官网看下就清楚了ATMEGA32ParameterValueFlash (Kbytes):32 KbytesPin Count:44Max. Operating Frequency:16 MHzCPU:8-bit AVR# of Touch Channels:16Hardware QTouch Acquisition:NoMax I/O Pins:32Ext Interrupts:3USB Speed:NoUSB Interface:NoATMEGA328Key ParametersParameterValueFlash (Kbytes):32 KbytesPin Count:32Max. Operating Frequency:20 MHzCPU:8-bit AVR# of Touch Channels:16Hardware QTouch Acquisition:NoMax I/O Pins:23Ext Interrupts:24USB Speed:NoUSB Interface:No

单片机用LCD12864显示图片时图片输出问题

我有把图片转换成代码的小插件 可以传给你

51单片机汇编语言。求两个数的平方和。

PFH: MOV A, 30H MOV B, A MUL AB MOV 40H, A MOV 41H, B MOV A, 31H MOV B, A MUL AB ADD A, 40H MOV 40H, A MOV A, B ADDC A, 41H MOV 41H, A CLR A ADDC A, #0 MOV 42H, ARET

单片机数字时钟整点报时问题。

楼主只要改用有源蜂鸣器即可实现要求。注意控制高低电平时间不要少于1秒,同时需要外部加三极管驱动。

用51单片机设计数字钟,六位数码管显示时分秒,四个发光二极管做为秒点一秒钟闪烁一次。用protues软件仿真

汇编是我心中永远的痛啊!可以给一个C的,不过这只是大概的框架,细节问题在没有在实际中用是很难发现的!#include<reg52.h> #define uchar unsigned char#define uint unsigned intsbit p10=P1^0; //定义端口,p10控制四个LED闪烁uchar secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;uint num=0,sec=0,min=0,hour=0;uint time=5000;unsigned char code LEDBUF[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义数码管显示的0-9的代码void delay(unsigned int z){ //延时程序 unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);//如果是12MHz晶振,就是110us对应z=1 } void display();void main(){TMOD=0x02;//T0定时器,模式2定时,8位定时 TH0=55; //定时1S的数据设置,定时200个机器周期后中断一次,0.2ms TL0=55; EA=1;ET0=1;TR0=1;//开启总中断,允许T0中断,开启T0中断 while(1) {display();//显示时间 } }void time0() interrupt 1 {num++;//T0中断服务程序,定时中断一次后num加一 time --; If(time <=2500) { P10=0;} else { p10=1;} If(!time) {time=5000; sec++; if(sec==60) {sec=0; min++;//到60s,min加一,sec清零 if(min==60) {min=0; hour++;//到60分,hour加一,分清零 if(hour==24) {hour=0; min=0;//到24小时则所有时间清零,新的一天从零时开始计时 sec=0; } } } }}void display()secge=sec%10;//秒的个位,秒除以10的余数 secshi=sec/10;//十位,秒整除10的商 minge=min%10; minshi=min/10; hourge=hour%10; hourshi=hour/10; P2=0xfe;//1111 1110,0选通一位数码管, P0= LEDBUF [secge];//送秒的各位显示 delay(5);//延时一会儿 P2=0xfd;//选通下一位数码管,1111 1101 P0= LEDBUF [secshi];//送秒的十位显示 delay(5); P2=0xfb;//1111 1011,选通再下一位 P0=0x40;//显示分与秒之间的那个点 delay(5); P2=0xf7;//1111 0111,再下一位 P0= LEDBUF [minge];//分的个位 delay(5); P2=0xef;//1110 1111 P0= LEDBUF [minshi];//分的十位 delay(5); P2=0xdf;//1101 1111 P0=0x40;//分与时间的点 delay(5); P2=0xbf;//1011 1111 P0= LEDBUF [hourge];//小时的个位 delay(5); P2=0x7f;//0111 1111 P0= LEDBUF [hourshi];//小时的十位 delay(5);}

求单片机汇编语言程序解释

这是一段时间显示及调整程序,全解释也太累了,您具体问哪一句?

C语言 单片机 数字钟

每句都帮你注释,太麻烦了吧,何况别人也没那么多时间。你应该指出哪里的语句最弄不明白,要别人帮你注释还差不多还有,你最好现就加到至少120分

单片机里的PD和IDL是什么

power down modeidle mode

51单片机如何用锁存器连接kyx3461as数显管

可以用573,也可以不用,用573的原理图如下:

使用定时器1以定时方法在P1.0输出周期为300us,占空比为40%的矩形脉冲,设单片机晶振为6MHz.。

unsigned char hflag;sbit pulse=P1^0;unsigned char hth1h,hth1l,lth1h,lth1l;#include<reg51.h>main(){ TMOD=0x10; hth1h=(65536-60)/256; hth1l=(65536-60)%256; lth1h=(65536-90)/256; lth1l=(65536-90)%256; TH1=hth1h; TL1=hth1l; EA=1; TR1=1; ET1=1; hflag=0xff; while(1){;}}void t1isr() interrupt 3{ if(hflag==0xff) { TH1=lth1h; TL1=ith1l; hflag=0x00; pulse=1; } if(hflag==0x00) { TH1=hth1h; TL1=hth1l; hflag=0xff; pulse=0; }}

求大神写一下单片机at89c52控制秒表电路循环显示0到99的程序

你的电路上是无法分辨出这个数码管是共阴还是共阳的。

keil4 与 keil c51有什么区别吗 我们在学 嵌入式 用的是 keil4.也在学单片机

不要管它,直接用了,只要你不用ARM单片机,就没关系的

单片机课程设计(数字时钟) 麻烦大家不要发链接 直接帮我把程序写过来。

老朱的错 真的 罪过

单片机keil使用详解

http://wenku.baidu.com/search?word=%B5%A5%C6%AC%BB%FAkeil&lm=0&od=0有好多

单片机软件keil怎么用

单片机软件kenai怎么用?问一下有关知道的人员?或者你买的东西都有说明书,按说明书查找

我初学单片机,看网上有人说keil有人说keilC,这两者有区别吗?是不同的...

keilc是keil里面的一个编译软件,keil中还有关于AVR,ARM方面的编译器

单片机中的Timer0Interrupt(void) interrupt 1什么意思?

1.这是定时器0的中断函数。2.可以看到Timer0——Timer0——定时器0——中断。3.定时器设置初始值和开放,当计数器计数设置数量,将会有一个定时器中断,然后不管你有什么代码运行时的程序,将跳转到IsrTimer0这个函数运行,运行完成后返回之前执行的代码。4.这个方法不能改变,函数名也不能改变。扩展资料:定时器适用范围及注意事项适用范围1.在峰谷电价不同的地区,在低电价阶段可以使用大功率电器自动运行。2.用于控制需要定时开关的家用电器。如:饮水机、热水器、空调、电饭煲、广告灯饰等。3.用于定时控制电源。如:电动自行车电池、手机电池、充电电池等。4.频繁开关的场合。如花坛、草坪的间歇式喷灌,鱼缸、喷泉的定期氧气过滤等。5.家用防盗系统自动控制。注意事项1.连接本产品的电器总功率不得超过室内干燥环境下的额定功率和应使用。2.产品可以回收,程序集也可以回收。3.请勿将本产品直接插入运行中的电器中。4.当电器连接到定时器时,开关必须处于开启状态。5.在保修期内请不要拆卸定时器。一旦拆卸,保修服务将终止。请咨询专业电工或专业维修。

单片机设置计数器0-100.高于100还是100,低于0还是0 ,用外部中断控制加减,写了一部分不会改了。

看的很累,所以重编了一个给你ORG 0000HLJMP MAINORG 0003HLJMP EX0INTORG 0013HLJMP EX1INTORG 0030HMAIN: MOV SP,#5FH SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB EA MOV R2,#0 MOV DPTR,#TABLOOP: JB P1.0,LPSW CLR P1.2 MOV P0,#0FFH SJMP LOOP1LPSW: SETB P1.2LOOP1: MOV A,R2 MOV B,#100 DIV AB MOVC A,@A+DPTR MOV P0,A MOV P2,#11111011B LCALL DELAY MOV A,B MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P0,A MOV P2,#11111101B LCALL DELAY MOV A,B MOVC A,@A+DPTR MOV P0,A MOV P2,#11111110B LCALL DELAY LJMP LOOPEX0INT: LCALL DELAY JB P3.2,EX0E INC R2 CJNE R2,#100,EX01EX01: JC EX0E MOV R2,#100EX0E: RETIEX1INT: LCALL DELAY JB P3.3,EX1E CJNE R2,#1,EX11EX11: JC EX1E DEC R2EX1E: RETIDELAY: MOV R3,#10DELAY1: MOV R4,#250 DJNZ R4,$ DJNZ R3,DELAY1 RET END

单片机C语言编程作业求帮助, (1)可通过串口控制光敏传感器、数码管、继电器、蜂鸣器的开关, 发送

(2),(3),(4)段程序错了

谁有c8051f单片机AD转换(c)急用!

/***************************************************************功能:实现ADC采样芯片外的模拟电压,通过LCD显示,并通过串口(J13)发送到PC机 注:试验时把ADC0的工作基准VREF0(J7_5和J7_6或J7_2和J7_6)和LCD电源跳线(J18_1和J18_2)联接好!作者:ZDP时间:2005-11-30版本:V1.0用外部基准: J7 NC 1 2 内部VREF 外部VREF 3 4 内部DAC工作基准输入 外部VREF 5 6 内部ADC0工作基准输入 外部VREF 7---8 内部ADC1工作基准输入或用内部基准: J7 NC 1 2- 内部VREF 外部VREF 3 4 | 内部DAC工作基准输入 外部VREF 5 6 | 内部ADC0工作基准输入 外部VREF 7 8- 内部ADC1工作基准输入***************************************************************/#include <c8051f020.h> // SFR declarations#include <stdio.h>#include <INTRINS.H>//-----------------------------------------------------------------------------// 16-bit SFR Definitions for "F02x//-----------------------------------------------------------------------------sfr16 DP = 0x82; // data pointersfr16 TMR3RL = 0x92; // Timer3 reload valuesfr16 TMR3 = 0x94; // Timer3 countersfr16 ADC0 = 0xbe; // ADC0 datasfr16 ADC0GT = 0xc4; // ADC0 greater than windowsfr16 ADC0LT = 0xc6; // ADC0 less than windowsfr16 RCAP2 = 0xca; // Timer2 capture/reloadsfr16 T2 = 0xcc; // Timer2sfr16 RCAP4 = 0xe4; // Timer4 capture/reloadsfr16 T4 = 0xf4; // Timer4sfr16 DAC0 = 0xd2; // DAC0 datasfr16 DAC1 = 0xd5; // DAC1 data#define BAUDRATE 115200 // Baud rate of UART in bps#define SYSCLK 22118400 // SYSCLK frequency in Hz#define SAMPLE_RATE 50000 // Sample frequency in Hz#define INT_DEC 256 // integrate and decimate ratio#define AMX0SL_AIN 8 // 0=AIN0....7=AIN7,8=TEMPvoid SYSCLK_Init (void);void PORT_Init (void);void UART0_Init (void);void ADC1_Init (void);void Timer3_Init (int counts);void ADC1_ISR (void);void LCD_Init(void);unsigned char NCDdata[3]={0x30,0x30,0x30};unsigned char result;unsigned char *lcdpoint; //指向 lcddata数组的指针unsigned char lcd_data_count; //要显示的数据个数 void main (void) { unsigned int temperature,x; unsigned char data1; WDTCN = 0xde; // disable watchdog timer WDTCN = 0xad; SYSCLK_Init (); // initialize oscillator PORT_Init (); // initialize crossbar and GPIO UART0_Init (); // initialize UART0 Timer3_Init (SYSCLK/SAMPLE_RATE); // initialize Timer3 to overflow at // sample rate ADC1_Init (); // init ADC AD0EN = 1; // enable ADC EA = 1; while(result==0); //等于0,侧等待 while (1) { EA = 0; // 关中断 temperature = result; temperature&=0x00ff; //LCD显示数据处理 NCDdata[0]=result/100+0x30; NCDdata[1]=(result%100)/10+0x30; NCDdata[2]=(result%100)%10+0x30; EA = 1; //开中断 //转换为实际温度数据 printf ("Temperature is %u ", temperature);//把温度数据通过串口发送至PC机 LCD_Init(); //LCD初始化 P2 = 0xA0; //准备送数据 lcdpoint=&NCDdata; //取地址 for(lcd_data_count=3;lcd_data_count>0;lcd_data_count--) { data1=*lcdpoint; //读出数据 P3 = data1; //写数据到端口 P2 = 0X20; P2 = 0XA0; //控制LCD lcdpoint++; for(x=0;x<0x5000;x++); } for(data1=0;data1<50;data1++) { for(x=0;x<0xffff;x++) {_nop_();} } }}//-----------------------------------------------------------------------------// SYSCLK配置//-----------------------------------------------------------------------------// 配置系统时钟使用外部晶振22.1184MHzvoid SYSCLK_Init (void){ int i; // delay counter OSCXCN = 0x67; // start external oscillator with // 22.1184MHz crystal for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms) while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle OSCICN = 0x88; // select external oscillator as SYSCLK // source and enable missing clock // detector}//-----------------------------------------------------------------------------// PORT配置//-----------------------------------------------------------------------------void PORT_Init (void){ XBR0 = 0x04; // Enable UART0 XBR1 = 0x00; XBR2 = 0x40; // Enable crossbar and weak pull-ups P1MDIN = 0xFE; P0MDOUT |= 0x01; // enable TX0 as a push-pull output P2MDOUT = 0xe0; // P2口设为推挽方式 P3MDOUT = 0xff; // P2口设为推挽方式}//-----------------------------------------------------------------------------// UART0配置//-----------------------------------------------------------------------------// Configure the UART0 using Timer1, for <baudrate> and 8-N-1.void UART0_Init (void){ SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate TR1 = 1; // start Timer1 CKCON |= 0x10; // Timer1 uses SYSCLK as time base PCON |= 0x80; // SMOD00 = 1 TI0 = 1; // Indicate TX0 ready}//-----------------------------------------------------------------------------// ADC0配置,T3定时启动ADC//-----------------------------------------------------------------------------void ADC1_Init (void){ ADC1CN = 0x82; // ADC0 T3定时采样 REF0CN = 0x07; // 启用内部基准源 AMX1SL = AMX0SL_AIN; // 选择采样输入源 ADC1CF = 0xB1; // PGA gain = 1,1MHz转换频率 EIE2 |= 0x08; // 启用 ADC 中断}//-----------------------------------------------------------------------------// Timer3配置,T3定时启动ADC//-----------------------------------------------------------------------------void Timer3_Init (int counts){ TMR3CN = 0x02; TMR3RL = -counts; TMR3 = 0xffff; EIE2 &= ~0x01; TMR3CN |= 0x04;}//-----------------------------------------------------------------------------// ADC0采样中断//-----------------------------------------------------------------------------void ADC0_ISR (void) interrupt 17{ static unsigned int_dec=INT_DEC; static int accumulator=0L; ADC1CN &= ~0x20; // 清 ADC 中断标志位accumulator += ADC1; // 累加ADC采样数据 int_dec--; // 指针减1 if (int_dec == 0) { // 累加完了吗? int_dec = INT_DEC; // 指针复位 result = accumulator>>8; accumulator = 0; // 累加和变量清0 }}//LCD初始化void LCD_Init(void){unsigned long x; P2 = 0X80; for(x=0;x<1000;x++); //P7 = 0x30; /*一行显示*/ P3 = 0x38; /*两行显示*/ P2 = 0X00;//0x08; P2 = 0X80;//0x09; for(x=0;x<1000;x++); P3 = 0x0e; P2 = 0x00; P2 = 0x80; for(x=0;x<1000;x++); P3= 0x06; P2 = 0x00; P2 = 0x80; for(x=0;x<5000;x++); P3 = 0x01; P2 = 0x00; P2 = 0x80; for(x=0;x<5000;x++);}

单片机LED驱动几毫秒是看不见降灭的?

如果是分时扫描驱动LED阵列这类应用——教科书经常会拿电影的24Hz说事,但那是在环境光线特别暗、人眼快门速度变慢的情况下。从实际使用经验来说,在白天明亮环境下,扫描驱动的扫描速度至少要达到75Hz以上。

单片机控制十字路口交通灯程序设计

如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作:85 60个单位时间,南北红,东西绿;85 10个单位时间,南北红,东西黄;85 60个单位时间,南北绿,东西红;85 10个单位时间,南北黄,东西红;解:用P1端口的6个引脚控制交通灯,高电平灯亮,低电平灯灭。代码#include <at89x52.h> //sbit用来定义一个符号位地址,方便编程,提高可读性,和可移植性 sbit SNRed =P1^0; //南北方向红灯 sbit SNYellow =P1^1; //南北方向黄灯 sbit SNGreen =P1^2; //南北方向绿灯 sbit EWRed =P1^3; //东西方向红灯 sbit EWYellow =P1^4; //东西方向黄灯 sbit EWGreen =P1^5; //东西方向绿灯 /* 用软件产生延时一个单位时间 */ void Delay1Unit( void ) { unsigned int i, j; for( i=0; i<1000; i++ ) for( j<0; j<1000; j++ ); //通过实测,调整j循环次数,产生1ms延时 //还可以通过生成汇编程序来计算指令周期数,结合晶体频率来调整j循环次数,接近1ms } /* 延时n个单位时间 */ void Delay( unsigned int n ){ for( ; n!=0; n-- ) Delay1Unit(); } void main( void ) { while( 1 ) { SNRed=0; SNYellow=0; SNGreen=1; EWRed=1; EWYellow=0; EWGreen=0; Delay( 60 ); SNRed=0; SNYellow=1; SNGreen=0; EWRed=1; EWYellow=0; EWGreen=0; Delay( 10 ); SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=0; EWGreen=1; Delay( 60 ); SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=1; EWGreen=0; Delay( 10 ); } } 第四节:数码管驱动显示“12345678”P1端口接8联共阴数码管SLED8的段极:P1.7接段h,…,P1.0接段aP2端口接8联共阴数码管SLED8的段极:P2.7接左边的共阴极,…,P2.0接右边的共阴极方案说明:晶振频率fosc=12MHz,数码管采用动态刷新方式显示,在1ms定时断服务程序中实现代码#include <at89x92.h> unsigned char DisBuf[8]; //全局显示缓冲区,DisBuf[0]对应右SLED,DisBuf[7]对应左SLED, void DisplayBrush( void ) { code unsigned char cathode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //阴极控制码 Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; static unsigned char i=0; // (0≤i≤7) 循环刷新显示,由于是静态变量,此赋值只做一次。 P2 = 0xff; //显示消隐,以免下一段码值显示在前一支SLED P1 = Seg7Code[ DisBuf[i] ]; //从显示缓冲区取出原始数据,查表变为七段码后送出显示 P2 = cathode[ i ]; //将对应阴极置低,显示 if( ++i >= 8 ) i=0; //指向下一个数码管和相应数据 } void Timer0IntRoute( void ) interrupt 1 { TL0 = -1000; //由于TL0只有8bits,所以将(-1000)低8位赋给TL0 TH0 = (-1000)>>8; //取(-1000)的高8位赋给TH0,重新定时1ms DisplayBrush(); } void Timer0Init( void ) { TMOD=(TMOD & 0xf0) | 0x01; //初始化,定时器T0,工作方式1 TL0 = -1000; //定时1ms TH0 = (-1000)>>8; TR0 = 1; //允许T0开始计数 ET0 = 1; //允许T0计数溢出时产生中断请求 } void Display( unsigned char index, unsigned char dataValue ){ DisBuf[ index ] = dataValue; } void main( void ) { unsigned char i; for( i=0; i<8; i++ ){ Display(i, 8-i); } //DisBuf[0]为右,DisBuf[7]为左 Timer0Init(); EA = 1; //允许CPU响应中断请求 While(1); }

单片机或cortex M系列的某个GPIO设置为analog后,电压值如何存入和读取?

仅设为analog端口是不行的,关键是要启动内部AD转换模块STM32内部有2个或3个ADC模块,要配置许多参数,如使用哪个模块 单次采集还是连续采集 采集哪一通道 是定时器启动 还是软件启动 左对齐还是右对齐等 还有ADC1 ADC2两个模块相互协同的工作模式,总之,AD采集这一部分比较复杂 需找相关教程认真学习一翻.

单片机analog input是什么功能

模拟量输入功能。

单片机sscanf函数问题

红色部分表示读到的变量数量少于2(比如数据为12:30时可以读到2个变量,如果是12则只能读到一个变量),或者没有读到。sscanf的输入是字符串变量,而scanf的输入是控制台,对单片机来说,scanf的输入一般指串口输入。

单片机sscanf函数问题

红色部分表示读到的变量数量少于2(比如数据为12:30时可以读到2个变量,如果是12则只能读到一个变量),或者没有读到。sscanf的输入是字符串变量,而scanf的输入是控制台,对单片机来说,scanf的输入一般指串口输入。

单片机中的LOOP是什么?

只是个标号而已,你高兴的话改成noop也可以

单片机中的LOOP是什么?

单片机中的LOOP是循环指令。x0dx0ax0dx0a其使用方法为:x0dx0aloop(A)x0dx0a{};x0dx0a只要A成立或者A=1,那么就循环执行{}内的内容,知道A不成立,或者A=0。x0dx0ax0dx0a单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机中的LOOP是什么?

单片机中的LOOP是循环指令。其使用方法为:loop(A){};只要A成立或者A=1,那么就循环执行{}内的内容,知道A不成立,或者A=0。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

Dave软件能用于什么单片机

没有听说过...wave倒是有。Dave是编译软件还是什么?为什么不用keil呢?不过大多数的单片机都是基于51内核的。这个软件应该也有一定的通用性吧。只是孤陋寡闻没听说过而已。呵呵

STC单片机PWM编程!

PWM 主要是定时器 和 寄存器的配置 只要配置合适 PWM就出来了

MSP430单片机中MAB和MDB指的是什么?

你好!MAB是地址总线,MDB是数据总线,在MSP430上这两个都是不开放的,外部只有IO和模块接口。仅代表个人观点,不喜勿喷,谢谢。

分享Github上几个开源单片机硬件驱动库

Github上的项目基本上以软件为主,硬件的很少,优秀的硬件开源项目更少。单片机的开发中驱动模块化带来的好处是移植方便,不依赖于硬件,但是与裸机开发相比代码复杂不易理解。所以驱动、组件等封装的功能完善、代码量少、简单易用、可移植性高,是一个优秀的硬件驱动所必备的。 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。 使用方法 1.先申请一个按键结构 2.初始化按键对象,绑定按键的GPIO电平读取接口 read_button_pin() ,后一个参数设置有效触发电平 3.注册按键事件 4.启动按键 5.设置一个5ms间隔的定时器循环调用后台处理函数 Examples AT指令在无线通讯模组中通用的一种形式,AT_Commom(不知道是不是作者拼错了或者有别的什么意思)是一个解析AT至指令的函数,相对来说用起来还算简单。 Example 代码中给出了Sim800模块的例子,可以做为参考使用。 这个是周立功团队开发的一个软件包,定义了一系列常用外设(如:UART、IIC、SPI、ADC等)的通用接口,基于通用接口的应用可以跨平台复用。这个项目相对比较活跃,但代码量还是比较大。 一个好的文档说明是一个开源项目能够火起来的必备条件,作者们还是需要花心思在项目文档上的,比如推荐的第一个项目。那么各位读者你用过的或者知道的还有哪些漂亮的硬件驱动封装,推荐出来跟大家一起关注下吧。

单片机牛人有哪些,我想看看他们的学习经历和成长的过程 请举几个例子。

周立功,以一己之力,创办了周立功单片机发展有限公司。电子科技大学的吴鉴鹰,16岁考上电子科技大学,20岁创办了一家外包公司,30岁已身价千万。哈尔滨工程大学的郭天祥,读研究生时创办了一家公司。

单片机大神吴鉴鹰,周立功,郭天祥,他们成功的根本原因是什么?有人总结。

每个人的背后都有自己的辛酸,以上几个都做得不错,hck2lij你这么说是啥意思,你是啥东西,人家没本事人家有人支持,管你毛事,你有本事你也来啊,会喷了不起啊,你是做什么的我不关心,至少你这人品不咋地,看到你恶心啊

单片机大神的简历分享几个

一、吴鉴鹰吴鉴鹰,男,1985.9,老家安徽安庆,04年毕业于电子科技大学学生,后接触单片机,已经成为单片机领域的一个企业家,名下有鉴鹰电子科技有限公司,主要进行教育类电子产品的开发和电力电力产品以及智能仪器仪表的开发,旗下的产品有高频数字电源,网络分析仪,矿下安全检测系统,无损探测仪等高科技产品。在本科期间,就积极参与校园的各项活动,那时我对电子的感情用“痴迷”两个字来形容绝不为过,参加学校组织的各项比赛,在本科生期间,获得全国的电子设计大赛一等奖,全国飞思卡尔比赛一等奖。利于业余时间申请并获得专利10余项。因为著有《吴鉴鹰单片机项目实战精讲》而被人们熟知。二、周立功周立功,男,1964年3月出生,毕业于东华大学自动化及计算机系,高级工程师,中国单片机协会理事,中国海洋大学讲座教授,硕士生导师,主要研究方向为嵌入式系统与现场总线,目前正在从事80C51、ARM与Nios II等软核SoC的研究与开发。三、郭天祥郭天祥(1983.10- ),老家新疆伊宁,原哈尔滨工程大学学生,后接触单片机,已经成为单片机领域的一个企业家,名下有天祥电子网站,其最大成就之一是开设了十天学会单片机系列课程并录制出来,网络上广泛流传,有《十天学会51单片机视频教程》、《十天学会PIC单片机视频教程》、《十天学会AVR单片机视频教程》,可以说这三种单片机类型几乎涵盖了市面上近90%的单片机产品,这些视频教程为广大单片机爱好者提供了最好的学习材料,另外还有关于ARM、嵌入式系统的视频教程,因其名誉广传,被广大学生敬称为郭老师。05年开始学习单片机C语言编程,5月获学校五四杯电子设计竞赛二等奖,6月参加“枭龙杯”全国空中机器人比赛(于11月在成都举行)获全国亚军,9月参加“索尼杯”全国大学生电子设计竞赛未获奖。05年期间学会了C语言、C++语言、VC++编程、VHDL语言、FPGA/CPLD(可编程逻辑器件)。

广州周立功单片机发展有限公司的部分产品介绍

自主研发 产品类别 产品种类 工业通讯与工业控制 X86与ARM嵌入式工控机主板、人机界面HMI、工业以太网、CAN-bus现场总线、无线通信、数据采集卡、串行通讯产品、工业自动化教学实验开发平台、电源模块 测控仪器 数字示波器、逻辑分析仪、编程器、嵌入式智能仿真开发平台(MCU/ ARM/DSP仿真)、集成开发环境IDE、USB分析仪、CAN分析仪 楼宇自动化 门禁控制器、防盗报警系统、电梯控制器、读卡器/发卡器/读卡模块、视频监控系统、协议转换器、一卡通管理软件 嵌入式系统教学 ARM嵌入式系统教学实验开发平台(实验箱/开发板)、DSP开发平台、SOPC/EDA教学实验开发平台(实验箱/开发板)、单片机教学实验开发平台(实验箱/开发板)、工业自动化教学实验开发平台(CAN-bus/DeviceNet/工业以太网)   分销/代理 厂商 产品种类 NXP半导体 8位单片机、32位Cortex-M3/ARM7/ARM9微控器、汽车电子、智能识别、I2C-bus器件、UART器件等 TI半导体 DSP微控制器 Actel半导体 FPGA微控制器 ON半导体 电源器件、模拟器件、存储器件、电路保护器件 EXAR半导体 电源器件、升降压稳压器、LDO稳压器、复位监控器件等 ISSI半导体 SRAM存储器、DRAM存储器、EEPROM存储器 CEL公司 ZigBee模块

广州周立功单片机怎么样?

还不错,,

广州周立功单片机发展有限公司的公司概况

广州周立功单片机发展有限公司成立于1999年。2009年2月举办十周年庆典活动;总注册资金达二仟陆佰伍拾万元,员工近千名,研发人员400多人;总部在广州,在北京、上海、南京、杭州、深圳、成都、重庆、武汉、香港设有分公司;自主研发产品:嵌入式工业自动化与通讯网络产品和解决立案、嵌入式测量测试仪器、嵌入式系统集成开发环境、楼宇自动化产品和解决方案、嵌入式系统教学产品等;代理半导体芯片:NXP、TI、Actel、ON、Exar、ISSI、CEL;单片机与ARM嵌入式系统行业领导者;TKScope仿真器领跑国际嵌入式智能开发平台;TKStudio IDE是国内唯一、功能强大的嵌入式集成开发环境;CAN-bus/DeviceNet工业通讯现场总线技术领先者;逻辑分析仪性能优异、国内领先;逻辑分析仪等嵌入式测量测试仪器国家标准参与制订者;自2000年以来销售NXP 半导体保持全球第一,多次荣获原NXP颁发的大奖;2009年8月14日,NXP与ZLG举行携手合作十周年庆典;荣获《EDN China电子设计技术》中国本土创新公司奖;荣获嵌入式系列《电子产品世界》编辑推荐奖;连续多年被国际权威媒体“环球资源”旗下的年。《国际电子商情》评为中国本地最佳半导体分销代理商、最佳供货、最佳技术支持;出版发行单片机与嵌入式系统学科方向图书专著近40本,与同类图书相比都属于畅销书系列,部分嵌入式系统的图书已作为几十所高校的教材和参考资料。周立功单片机网站是中国最好、最大,最受欢迎,影响力最广泛的单片机与嵌入式系统技术服务网站,一年访问次数为1200万多次以上;举办2009全国“IEEE标准电脑鼠走迷宫”竞赛;连续举办二届“Actel杯”全国大学生FPGA设计竞赛;连续举办三届“ZLG杯”全国大学生ARM嵌入式系统电子设计竞赛;赞助山东省和江西省大学生电子设计竞赛;创立周立功“3+1”创新教育模式。并在江西理工大学、宁波大学、成都信息工程学院、长沙理工大学、西安邮电学院实施;2001年5月注册成立广州致远电子有限公司,现为高新技术企业;广州致远研发中心下设:工业通讯网络事业部、嵌入式系统事业部、测控技术事业部、楼宇自动化事业部、OEM/ODM产品事业部、计算机软件事业部、工业设计事业部等;广州致远生产中心拥有先进的生产设备,齐全检测手段。包括自动化表贴机、BGA封装器件返修工作站、全自动裸片邦定机、高低温试验箱、多功能校准仪、静电放电发生器、快速脉冲群发生器、频谱分析仪、网络分析仪、以太网流量分析仪、电子负载仪、快速温度变化(湿度)试验箱等。

什么是51 单片机中断允许触发器

哈!一堆开关,一个让51单片机在发生的突发事件(一般51中是五个,二个外部中断,二个计时中断,一个串口中断)如它们满或有符合要求的动作时去不去执行相关的程序的开关,可要注意,这不只有单的!还有个总开关哟!EA!

MCS51单片机的中断优先级别由什么决定

由中断优先级寄存器IP决定

哪位大神指点下单片机SETB PXO是什么意思

SETB 是位操作指令, PX0 是中断标志的最低位(LSB),即 D0, 不是字母 O 。执行 SETB PX0 的结果是 PX0 = 1 。

旋转编码器连接单片机

while(1){//P1^00=X0 P1^01=X1 if(X0==1 AND X1==1 AND flag0==0 AND flag1==0 AND flag2==0 AND flag3==0 AND flag4==0 AND cc==0){flag0=1;cc=1;}if(X0==0 AND X1==1 AND flag0==1 AND flag1==0 AND flag2==0 AND flag3==0 AND flag4==0 AND cc==1){flag1=1;cc=2;}if(X0==0 AND X1==0 AND flag0==1 AND flag1==1 AND flag2==0 AND flag3==0 AND flag4==0 AND cc==2){flag2=1;cc=3;}if(X0==1 AND X1==0 AND flag0==1 AND flag1==1 AND flag2==1 AND flag3==0 AND flag4==0 AND cc==3){flag3=1;cc=4;}if(X0==1 AND X1==1 AND flag0==1 AND flag1==1 AND flag2==1 AND flag3==1 AND flag4==0 AND cc==4){flag0=0;flag1=0;flag2=0;flag3=0;flag4=0;cc=0;aa++;LCD12864_disp2(); //LCD12864液晶动态显示函数 }///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(X1==1 AND X0==1 AND flag5==0 AND flag6==0 AND flag7==0 AND flag8==0 AND flag9==0 AND ccd==0){flag0=1;cc=1;}if(X1==0 AND X0==1 AND flag5==1 AND flag6==0 AND flag7==0 AND flag8==0 AND flag9==0 AND ccd==1){flag1=1;cc=2;}if(X1==0 AND X0==0 AND flag5==1 AND flag6==1 AND flag7==0 AND flag8==0 AND flag9==0 AND ccd==2){flag2=1;cc=3;}if(X1==1 AND X0==0 AND flag5==1 AND flag6==1 AND flag7==1 AND flag8==0 AND flag9==0 AND ccd==3){flag3=1;cc=4;}if(X1==1 AND X0==1 AND flag5==1 AND flag6==1 AND flag7==1 AND flag8==1 AND flag9==0 AND ccd==4){flag5=0;flag6=0;flag7=0;flag8=0;flag9=0;ccd=0;aa--;LCD12864_disp2(); //LCD12864液晶动态显示函数 } }}//需注意:普通的旋转编码器都是适用于PLC的,也就是输出的是24V的脉冲信号,需要进行电平转换。//这个程序只是考虑到了AB相时序的变化,没有用到中断处理,可能分辨不出高速信号//还有变量自己定义吧,应该把所有代码贴出来的,所加的程序仅作参考,没有调试过。

什么是单片机寻址方式

mov 60h,40h 是直接寻址方式方式mov a, #58hmov ro, #0b0hmov@ro, amov 0b0h, #28h结果是:(0b0h)=28h;p3=58h(这个不太确定)内部ram七种方法都可以的啊,外部数据存储器只能和a累加器进行数据传送

单片机 两个有符号数分别在50H和51H里面,比较他们的大小,最后把大的放入60H单元。

COMPAR:CLRC;进位标志清零MOVA,50H;50H值送ACJNEA,51H,COMP;比较A与51H值大小COMP:JCCOMP1;如果50H<51H转COMP1JBACC.7,COMP01;判50H的正负MOVA,51H;50H为正JBACC.7,COMP02;判51H正负MOV60H,50H;50H,51H均为正,50H大送60HGOTOOKS;COMP01:MOV60H,51H;50H为负,但50H>51H,所以51H无论正负均大GOTOOKSCOMP02:MOV60H,51H;50H,51H均负,值小为大GOTOOKSCOMP1:JBACC.7,COMP10;判50H正负MOVA,51H;50H为正JBACC.7,COMP11;判51H正负MOV60H,51H;均正,51H大GOTOOKSCOMP10:MOV60H,50H;50H负,值小为大GOTOOKSCOMP11:MOV60H,50H;均负,值下为大OKS:RET

急求一个单片机编程题5

乱写的,凑合看吧:ORG2000HCLRAMOVR7,#0MOVR6,#0MOVR5,#30MOVR4,#20MOVR3,#50HMOVR2,#20HLOOP1:MOVA,@R4JNBACC.7,LOOP2;判断符号数的正负INC@R3MOVX@R3,A;负数存入外存中51H开始的单元中INC@R7;负数个数+1LOOP2:INC@R2MOVX@R2,A;正数存入外存中21H开始的单元中INC@R6;正数个数+1CJNEA,#64H,LOOP3SJMPLOOP4LOOP3:JNCLOOP4MOVB,#0AH;小于100的数改成压缩BCD码送还至原地址单元DIVABSWAPAADDA,BMOV@R4,ALOOP4:MOV@R4,#0AAH;不小于100的数改为AAH送还至原地址单元INC@R4DJNZR5,LOOP1MOVDPTR,#20H;正数的个数存放至外存区20H单元中MOVA,@R6MOVX@DPTR,AMOVDPTR,#50H;负数的个数存放在外存区50H单元中MOVA,@R7MOVX@DPTR,ASJMP$上边的几个回答--...此程序若还有错误请及时联系我修改,谢谢先!另:各位参考的童鞋切记要加相关注释,多少做点改动,被老师认为雷同的渣就概不负责了哈。So,建兄,渣就不多解释了。

单片机,程序存储器中的字节,如何区分是指令还是数据?

指令和数据主要是单片机按照其约定的命令书写格式来确定的。比如说MOVR7,#74HMOVA,#00H编译成HEX文件就是7F747400当计算机看到7F时,它就自己知道是MOVR7,所以后面的74就是你所说的数据,既然74在这里是数据,那么它后面的74肯定就是指令的,因为你在写MOVR7,#74H指令后不可能再加个数据吧。那你又要问了,单片机为什么不把7474理解为MOVA,#74H?这是因为在单片机里面,它解析每一个16进制数据时,是按其物理顺序一个接一个顺序执行的,如果你把7474理解为MOVA,#74H,那么,它前面和后面都会错多出一个未知数据,肯定是不允许的。单片机执行程序时,从第一条开始一条一条分析,肯定不会多或少,如果多了或少了,那就是程序出错,也就是我们常说的程序飞了!

单片机16位二进制转bcd码

靠,兄弟,你别浪费时间了。去问问你的老师和同学吧,单片机很重要的啊,不学好,找工作难啊

单片机汇编语言中比较指令

刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令CJNZCJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L2:MOVR1,#0FFHL3:SJMPL3JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOVR1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOVR1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。CJNEA,10H;把A中的值和10H中的值比较(注意和上题的区别)CJNE10H,#35H;把10H中的值和35H中的值比较CJNE@R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较

单片机的带借位减法

单片机中用到带借位的减法是为了进行多字节的减法运算,在进行高位字节运算时,要同时减去低位字节的借位,以得到正确的结果。如果cy=1,SUBB#09H,#05H结果是03H不是很正确噢首先你的指令是非法指令,计算机、单片机中的立即数是不能做目的操作数的,目的操作数是要保存结果的,而立即数是不能保存结果的。要想完成你的运算想法,应该写成如下形式:MOVA,#9SETBCSUBBA,#5即执行后:(A)-5-cy=9-5-1=3结果为03H是正确的。在进行最低字节的减法运算时,即刚开始做减法,还没有产生借位,应在运算前使cy=0即CLRCMOVA,#DATA1SUBBA,#DATA2执行时,(A)-DATA2-cy=DATA1-DATA2-0呵呵满意就选满意回答

单片机汇编语言中比较指令

刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令CJNZCJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L2:MOVR1,#0FFHL3:SJMPL3JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOVR1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOVR1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。CJNEA,10H;把A中的值和10H中的值比较(注意和上题的区别)CJNE10H,#35H;把10H中的值和35H中的值比较CJNE@R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较

单片机流水灯实验

A的开始值是11111110,左移动一位就是11111101,这样的话你的第一个灯为什么要亮呢?肯定不回亮了。

用单片机汇编写一个程序,求高手帮忙

系统晶振是11.0592MHzORG0000HLJMPSTARTORG0003H;INT0中断入口地址LJMPINT0ORG0040HSTART:MOVSP,#60HSETBEX0;INT0中断有效SETBIT0SETBEALCALLSTATUS0;初始状态(都是红灯)CIRCLE:LCALLSTATUS1;南北绿灯,东西红灯LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯LCALLSTATUS3;南北红灯,东西绿灯LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯LJMPCIRCLEINT0:PUSHPSW;保护现场PUSH2PUSHACCMOVDPTR,#8300HMOVA,#0FH;南北,东西都亮红灯MOVX@DPTR,AMOVR2,#100;延时10秒LCALLDELAYPOPACC;恢复现场MOVX@DPTR,APOP2POPPSWRETISTATUS0:;南北红灯,东西红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,AMOVR2,#10;延时1秒LCALLDELAYRETSTATUS1:;南北绿灯,东西红灯MOVDPTR,#8300HMOVA,#96H;南北绿灯,东西红灯MOVX@DPTR,AMOVR2,#200;延时20秒LCALLDELAYRETSTATUS2:;南北绿灯闪转黄灯,东西红灯MOVDPTR,#8300HMOVR3,#03H;绿灯闪3次FLASH:MOVA,#9FHMOVX@DPTR,AMOVR2,#03HLCALLDELAYMOVA,#96HMOVX@DPTR,AMOVR2,#03HLCALLDELAYDJNZR3,FLASHMOVA,#06H;南北黄灯,东西红灯MOVX@DPTR,AMOVR2,#10;延时1秒LCALLDELAYRETSTATUS3:;南北红灯,东西绿灯MOVDPTR,#8300HMOVA,#69HMOVX@DPTR,AMOVR2,#200;延时20秒LCALLDELAYRETSTATUS4:;南北红灯,东西绿灯闪转黄灯MOVDPTR,#8300HMOVR3,#03H;绿灯闪3次FLASH1:MOVA,#6FHMOVX@DPTR,AMOVR2,#03HLCALLDELAYMOVA,#69HMOVX@DPTR,AMOVR2,#03HLCALLDELAYDJNZR3,FLASH1MOVA,#09H;南北红灯,东西黄灯MOVX@DPTR,AMOVR2,#10;延时1秒LCALLDELAYNOPRETDELAY:;延时子程序PUSH2PUSH1PUSH0DELAY1:MOV1,#00HDELAY2:MOV0,#0B2HDJNZ0,$DJNZ1,DELAY2;延时100mSDJNZ2,DELAY1POP0POP1POP2RETEND

单片机中立即寻址和直接寻址有什么区别?

简单的理解以数据传送为例立即寻址:把一个数送到指定地址MOVA,#30H把数据30H数据送累加器直接寻址:把一个地址内的数据送到指定地址MOVA,30H把30H内的数据送累加器

80C51单片机的寻址方式

1.立即寻址方式采用立即寻址的指令一般是双字节的。第一个字节是指令的操作码,第二个字节是立即数。因此,操作数就是放在程序存储器中的常数。立即数前面应加前缀“#”号。例如:MOVA,#2BH;A←#2BH,即将立即数2BH传送至A中。2.直接寻址方式采用直接寻址的指令一般是双字节或三字节指令,第一字节为操作码,第二,三字节为操作数的地址码。单片机中,直接地址只能用来表示片内低128字节单元、专用寄存器和片内RAM的位地址空间。其中专用寄存器和位地址空间只能用直接寻址方式来访问。例如:MOVA,30H;(30H)→AMOVC,00H;(00H)→CyLJMP1000H;将1000H送入PC3.寄存器寻址方式寄存器寻址方式用于访问选定的工作寄存器R0~R7、A、B、DPTR和进位CY中的数。其中R0~R7由操作码低三位的8种组合表示,A、B、DPTR、C则隐含在操作码之中。这种寻址方式中被寻址的寄存器中的内容就是操作数。例如:MOVA,R0;(R0)→AMOVB,A;(A)→B4.寄存器间接寻址方式这种寻址方式中,指令指定寄存器中的内容为操作数的地址。寄存器间接寻址是用于访问片内数据存储器或片外数据存储器。当访问片内RAM或片外的低256字节空间时,可用R0或R1做为间址寄存器;当访问片外整个64KB的地址RAM空间时,用16位寄存器DPTR做间址寄存器。这类指令都为单字节的指令,操作码的最低位表示是采用R0还是R1做间址器。在执行PUSH和POP指令时,也采用寄存器间接寻址,此时用堆栈指针SP做间址寄存器。例如:MOVXA,@R0;((R0))→AMOVXA,@DPTR;((DPTR))→APOPACC;((SP))→A,(SP)-1→SP5.基址加变址寻址方式这种寻址方式用于访问程序存储器中的某个字节。以DPTR或PC作为基址寄存器,累加器A做为变址寄存器,两者的内容之和为操作数的地址。这种寻址方式常用于查表操作。例如:MOVCA,@A+DPTR;指令代码为93H,单字节指令。设该指令放在1040H单元,A的原内容为A0H,DPTR中的值为3000H,则操作数的地址等于:A0H+3000H=30A0H,即将30A0H单元中的内容传送至A中。6.位寻址方式位寻址是指对片内RAM的位寻址区(字节地址20H~2FH)和可以位寻址的专用寄存器进行位操作时的寻址方式。在进行位操作时,借助于进位C作为位操作累加器。操作数直接给出该位的地址,然后根据操作码的功能对其进行位操作。位寻址的位地址与直接寻址的字节地址形式完全一样,主要由对应的操作数的位数来区分,使用时应加以注意。例如:MOV10H,C;10H是位寻址的位地址(C是位累加器)MOVA,10H;10H是直接寻址的字节地址(A是字节累加器)

麻烦单片机编程高手告诉我这每一步的意思

BZ1:EQU20H;BZ1BZ2BZ3常量定义BZ2:EQU21HBZ3:EQU22HMOV20H,#00H;地址20H赋值MOV21H,#00H;同上MOV22H,#00H;同上SETBEA; 允许单片机总中断SETB1T;这个没见过,不知道你是不是打错了==、SETBEX0;允许外部中断0MAIN:MOVR1,#80H;标志MAIN,R1赋值80HMAIN0:MOVA,20H;A赋值20HCJNEA,#01H,MAIN1;比较A和01H的值,非零则跳转MAIN1JMPCC;无条件跳转至CCMAN1:MOVA,21H;MAN1标志,这里你是不少打字母I了。。A赋值21HCJNEA,#01H,MAIN2;同上JMPFF;无条件跳转MAIN2:MOVDPTR,#0EFFFH;赋值MOVXA,@DPTR;DPTR指向地址的内容赋值给AMOVDPTR,#0DFFFHMOVX@DPTR,A;同上MOVDPTR,#0BFFFHMOVA,R1;R1内容赋值给ADECA;A自减1MOVR1,ACJNEA,#00H,MAIN0;同上JMPMAIN;跳转CC:MOV21H,#00HMOVR2,#0FFHMOVR3,#0FFHCC0:MOVA,22HMOVR1,#80HCJNEA,#00H,CC1MOV22H,#00HJMPMAINCC1:MOVDPTR,#0FFF7HMOVXA,@DPTRMOVDL,R2MOVDH,R3MOVX@DPTR,ADECR2CJNER2,#00H,CC2MOVR2,R3CC2:MOVDPTR,#0FFFBHMOVX@DPTR,AMOVDPTR,#0FFFEHMOVA,R1MOVX@DPTR,ADECAMOVR1,ACJNEA,#00H,CC1JMPCC0FF:MOV20H,#00HMOVR2,#FFHMOVR3,#0FFHFF0:MOVA,22HMOVR2,#80HCJNEA,#00H,FF1FF1:CJNER2,#00H,FF2JMPMAINFF2:MOVDL,R2MOVDH,R3MOVXA,@DPTRMOVDPTR,#0FFBHMOVX@DPTR,ADECR2CJNER2,#00H,FF3MOVR2,R3FF3:MOVDPTR,#0FFFEHMOVA,R1MOVX@DPTR,ADECAMOVR1,ACJNEA,#00H,FF1JMPFF0中断程序如下:键盘中断:2D:JNBP10K1JNBP11K2JNBP12K3JNBP13K4JNBP14K5JNBP15K6JMP2DK1:ACALLDELAYJNBP10K11JMPP102DK2:ACALLDELAYJNBP11K21JMP2DK3:ACALLDELAYJNBP12K31JMP2DK4:ACALLDELAYJNBP13K41JMP2DK5:ACALLDELAYJNBP14K51JMP2DK6:ACALLDELAYJNBP15K61JMP2DK11:MOVR0,#10H;置0.2ms/divRET;返回中断K21:MOVR0,#20H;置2ms/divRET;返回中断K31:MOVR0,#40H;置20ms/divRET;返回中断K41:MOV20H,#01H;置0.2ms/divRET;返回中断K51:MOV21H,#01H;置0.2ms/divRET;返回中断K61:MOV22H,#01H;置0.2ms/divRET;返回中断 以上第一次出现的指令都给你注释了。

单片机代码,找个高手解释下

ORG0000HAJMPMAINORG30HDTTA1DATA30HDTTA2DATA1234HMAIN:MOVR0,#DTTA1;初始化指针MOVDPTR,#DTTA2;片外RAM初始化指针MOVR7,#5LOOP:MOVA,@R0;开始传送,遇到#结束,否则判断是否为*.CJNEA,"#",L1;AJMPE_0L1:CJNEA,"*",L2;此处后面的L1应该改变成:L2,如果是L1的话,A!="*"就这里死循环.AJMPE_0L2:MOVX@DPTR,A;你这里MOV少了X,应该是MOVXINCDPTRINCR0DJNZR7,LOOP;个数控制E_0:SJMPE_0END

求一个51单片机汇编语言 串口输出一行中文的程序

ff

基于at89c51单片机 99秒倒计时 在仿真时为什么会出现乱码、请高手指点一下

……CJNE A,#2,I2 ;是否计够0.1秒MOV TCOUNT,#00H INC SECOND  ----加一?MOV A,SECONDCJNE A,#100,I1 ;是否计够10秒MOV SECOND,#6FHl1MOV A,SECOND……加一?不像倒计时。

怎么用51单片机4*4键盘实现简单计算器 就要加减就可以 汇编语言 麻烦可

KEYBUF EQU 40H ;键号存放单元 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值 MOV R0,#30H ;显示首地址 MOV R2,#0CH ;计算数据存放单元个数 CLR AQING: MOV @R0,A ;将数据存放单元清零 INC R0 DJNZ R2,QING MOV P0,#8FH ;关闭显示 MOV R1,#30H ;将显示首地址存放R1里

mcs—51单片机的串行口有哪几种工作方式

全双工的,可以同时收发!

求分51单片机控制七段数码管显示的时钟电路 和程序

定时器做的和用1302都可以,有扣扣吗?加你为你解答,

单片机汇编语言1加到100怎么编?

请问是什么型号的单片机呢?

单片机习题解答

呵呵,你真棒,这样的问题也能问啊,

汇编语言单片机中断

主程序是:流水灯0到7依次点亮、流水灯7到0依次点亮,反复循环。外部中断程序是:灯全亮、全灭3次。但是,程序没有开中断的指令,中断程序是不会执行的。START: ;在下面添加: SETB EA ;开总中断. SETB EX0 ;开INT0中断. CLR IT0 ; 设置INT0为电平触发. MOV A,#00H……外部中断就可以实现了。
 首页 上一页  16 17 18 19 20 21 22 23 24  下一页  尾页