单片机

阅读 / 问答 / 标签

51单片机中汇编语言中的swap是什么意思?

51单片机汇编语言中的swap是半字节交换指令。x0dx0aSWAPA这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:x0dx0aMOVA#00001111Bx0dx0aSWAPAx0dx0a执行SWAPA后,A中的内容变为11110000B。

51单片机中汇编语言中的swap什么意思?

半字交换,即一个字节的高4位和低4位互换

51单片机中汇编语言中的swap什么意思

swap是半字节交换指令。SWAP A 这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:MOV A#00001111BSWAP A执行SWAP A后,A中的内容变为11110000B。

单片机题目:SWAP是什么意思?

swap是交换指令,具体功能要看单片机内核了。大概是这样的:如果是8位内核的,比如mcs-51,实现的是字节内高四位和低四位的交换。如果是32位arm的话,实现两个操作地址内的数据交换。总的来说,就是数据交换了,至于怎么交换,由内核机制决定。

51单片机中汇编语言中的swap是什么意思?

51单片机汇编语言中的swap是半字节交换指令。SWAP A 这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:MOV A#00001111BSWAP A执行SWAP A后,A中的内容变为11110000B。

在单片机中,TAB是什么意思啊

单片机中,并没有 TAB。

单片机table是什么意思

桌面,载体

求一篇关于基于单片机的超声波测距仪设计的英文资料(附中文翻译更美,呵呵),毕业设计用。谢谢

This article described the three directions (before, left, right) ultrasonic ranging system is to understand the front of the robot, left and right environment to provide a movement away from the information. (Similar to GPS Positioning System) A principle of ultrasonic distance measurement 1, the principle of piezoelectric ultrasonic generator Piezoelectric ultrasonic generator is the use of piezoelectric crystal resonators to work. Ultrasonic generator, the internal structure as shown in Figure 1, it has two piezoelectric chip and a resonance plate. When it"s two plus pulse signal, the frequency equal to the intrinsic piezoelectric oscillation frequency chip, the chip will happen piezoelectric resonance, and promote the development of plate vibration resonance, ultrasound is generated. Conversely, if the two are not inter-electrode voltage, when the board received ultrasonic resonance, it will be for vibration suppression of piezoelectric chip, the mechanical energy is converted to electrical signals, then it becomes the ultrasonic receiver. 2, the principle of ultrasonic distance measurement Ultrasonic transmitter in a direction to launch ultrasound, in the moment to launch the beginning of time at the same time, the spread of ultrasound in the air, obstacles on his way to return immediately, the ultrasonic reflected wave received by the receiver immediately stop the clock. Ultrasound in the air as the propagation velocity of 340m / s, according to the timer records the time t, we can calculate the distance between the launch distance barrier (s), that is: s = 340t / 2 Ultrasonic Ranging System for the Second Circuit Design System is characterized by single-chip microcomputer to control the use of ultrasonic transmitter and ultrasonic receiver since the launch from time to time, single-chip selection of 8751, economic-to-use, and the chip has 4K of ROM, to facilitate programming. Circuit schematic diagram shown in Figure 2. Draw only the front range of the circuit wiring diagram, left and right in front of Ranging Ranging circuits and the same circuit, it is omitted. 1,40 kHz ultrasonic pulse generated with the launch Ranging system using the ultrasonic sensor of piezoelectric ceramic sensors UCM40, its operating voltage of the pulse signal is 40kHz, which by the single-chip implementation of the following procedures to generate. puzel: mov 14h, # 12h; ultrasonic firing continued 200ms here: cpl p1.0; output 40kHz square wave nop; nop; nop; djnz 14h, here; ret Ranging in front of single-chip termination circuit P1.0 input port, single chip implementation of the above procedure, the P1.0 port in a 40kHz pulse output signal, after amplification transistor T, the drive to launch the first ultrasonic UCM40T, issued 40kHz ultrasonic pulse, and the continued launch of 200ms. Ranging the right and the left side of the circuit, respectively, then input port P1.1 and P1.2, the working principle and circuit in front of the same location. 2, reception and processing of ultrasonic Used to receive the first launch of the first pair UCM40R, the ultrasonic pulse modulation signal into an alternating voltage, the op-amp amplification IC1A and after polarization IC1B to IC2. IC2 is locked loop with audio decoder chip LM567, internal voltage-controlled oscillator center frequency of f0 = 1/1.1R8C3, capacitor C4 determine their target bandwidth. R8-conditioning in the launch of the carrier frequency on the LM567 input signal is greater than 25mV, the output from the high jump 8 feet into a low-level, as interrupt request signals to the single-chip processing. Ranging in front of single-chip termination circuit output port INT0 interrupt the highest priority, right or left location of the output circuit with output gate IC3A access INT1 port single-chip, while single-chip P1.3 and P1. 4 received input IC3A, interrupted by the process to identify the source of inquiry to deal with, interrupt priority level for the first left right after. Part of the source code is as follows: receive1: push psw push acc clr ex1; related external interrupt 1 jnb p1.1, right; P1.1 pin to 0, ranging from right to interrupt service routine circuit jnb p1.2, left; P1.2 pin to 0, to the left ranging circuit interrupt service routine return: SETB EX1; open external interrupt 1 pop? acc pop? psw reti right: ...?; right location entrance circuit interrupt service routine ? Ajmp? Return left: ...; left Ranging entrance circuit interrupt service routine ? Ajmp? Return 4, the calculation of ultrasonic propagation time When you start firing at the same time start the single-chip circuitry within the timer T0, the use of timer counting function records the time and the launch of ultrasonic reflected wave received time. When you receive the ultrasonic reflected wave, the receiver circuit outputs a negative jump in the end of INT0 or INT1 interrupt request generates a signal, single-chip microcomputer in response to external interrupt request, the implementation of the external interrupt service subroutine, read the time difference, calculating the distance . Some of its source code is as follows: RECEIVE0: PUSH PSW PUSH ACC CLR EX0; related external interrupt 0 ? MOV R7, TH0; read the time value MOV R6, TL0? CLR C MOV A, R6 SUBB A, # 0BBH; calculate the time difference MOV 31H, A; storage results MOV A, R7 SUBB A, # 3CH MOV 30H, A? SETB EX0; open external interrupt 0 POP ACC? POP PSW RETI Fourth, the ultrasonic ranging system software design Software is divided into two parts, the main program and interrupt service routine, shown in Figure 3 (a) (b) (c) below. Completion of the work of the main program is initialized, each sequence of ultrasonic transmitting and receiving control. Interrupt service routines from time to time to complete three of the rotation direction of ultrasonic launch, the main external interrupt service subroutine to read the value of completion time, distance calculation, the results of the output and so on. V. CONCLUSIONS Required measuring range of 30cm ~ 200cm objects inside the plane to do a number of measurements found that the maximum error is 0.5cm, and good reproducibility. Single-chip design can be seen on the ultrasonic ranging system has a hardware structure is simple, reliable, small features such as measurement error. Therefore, it can be used not only for mobile robot can be used in other detection systems. Thoughts: As for why the receiver do not have the transistor amplifier circuit, because the magnification well, CX20106 integrated amplifier, but also with automatic gain control level, magnification to 76dB, the center frequency is 38k to 40k, is exactly resonant ultrasonic sensors frequency=====本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。(类似GPS定位系统) 一 超声波测距原理 1、压电式超声波发生器原理压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波 时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。 2、超声波测距原理超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2二 超声波测距系统的电路设计 系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用8751,经济易用,且片内有4K的ROM,便于编程。电路原理图如图2所示。其中只画出前方测距电路的接线图,左侧和右侧测距电路与前方测距电路相同,故省略之。1、40kHz 脉冲的产生与超声波发射测距系统中的超声波传感器采用UCM40的压电陶瓷传感器,它的工作电压是40kHz的脉冲信号,这由单片机执行下面程序来产生。puzel: mov 14h, #12h;超声波发射持续200mshere: cpl p1.0 ; 输出40kHz方波 nop ; nop ; nop ; djnz 14h,here; ret前方测距电路的输入端接单片机P1.0端口,单片机执行上面的程序后,在P1.0 端口输出一个40kHz的脉冲信号,经过三极管T放大,驱动超声波发射头UCM40T,发出40kHz的脉冲超声波,且持续发射200ms。右侧和左侧测 距电路的输入端分别接P1.1和P1.2端口,工作原理与前方测距电路相同。2、超声波的接收与处理接收头采用与发射头配对的UCM40R,将超声波调制脉冲变为交变电压信号,经运算放大器IC1A和IC1B两极放大后加至IC2。IC2是带有锁 定环的音频译码集成块LM567,内部的压控振荡器的中心频率f0=1/1.1R8C3,电容C4决定其锁定带宽。调节R8在发射的载频上,则LM567 输入信号大于25mV,输出端8脚由高电平跃变为低电平,作为中断请求信号,送至单片机处理.前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。部分源程序如下:receive1:push psw push acc clr ex1 ; 关外部中断1 jnb p1.1, right ; P1.1引脚为0,转至右测距电路中断服务程序 jnb p1.2, left ; P1.2引脚为0,转至左测距电路中断服务程序return: SETB EX1; 开外部中断1 pop? acc pop? psw retiright: ...? ; 右测距电路中断服务程序入口 ? ajmp? returnleft: ... ; 左测距电路中断服务程序入口 ? ajmp? return4、计算超声波传播时间在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路 输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。其部分源程序如下:RECEIVE0: PUSH PSW PUSH ACC CLR EX0 ; 关外部中断0 ? MOV R7, TH0 ; 读取时间值 MOV R6, TL0? CLR C MOV A, R6 SUBB A, #0BBH; 计算时间差 MOV 31H, A ; 存储结果 MOV A, R7 SUBB A, #3CH MOV 30H, A? SETB EX0 ; 开外部中断0 POP ACC? POP PSW RETI四、超声波测距系统的软件设计 软件分为两部分,主程序和中断服务程序,如图3(a)(b)(c) 所示。主程序完成初始化工作、各路超声波发射和接收顺序的控制。定时中断服务子程序完成三方向超声波的轮流发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。五、结论对所要求测量范围30cm~200cm内的平面物体做了多次测量发现,其最大误差为0.5cm,且重复性好。可见基于单片机设计的超声波测距系统具有硬件结构简单、工作可靠、测量误差小等特点。因此,它不仅可用于移动机器人,还可用在其它检测系统中。思考:至于为什么接收不用晶体管做放大电路呢,因为放大倍数搞不好,CX20106集成放大电路,还带自动电平增益控制,放大倍数为76dB,中心频率是38k到40k,刚好是超声波传感器的谐振频率

求一个51单片机5000字左右的中英文翻译 毕业设计用 谢谢

  Design of the Temperature Control System Based on AT89S51  Huang Wentian, Li Jinping  College of Information, Beijing Union University, Beijing 100101, China  woshihwt@yahoo.com.cn, xxtjinping@buu.edu.cn  ABSTRACT: The principle and functions of the temperature control system based on microcontroller AT89S51 are studied, and the temperature measurement unit consists of the 1-Wire bus digital temperature sensor DS18B20. The system can be expected to detect the preset temperature, display time and save monitoring data. An alarm will be given by system if the temperature exceeds the upper and lower limit value of the temperature which can be set discretionarily and then automatic control is achieved, thus the temperature is achieved monitoring intelligently within a certain range. Basing on principle of the system, it is easy to make a variety of other non-linear control systems so long as the software design is reasonably changed. The system has been proved to be accurate, reliable and satisfied through field practice.  KEYWORDS: AT89S51; microcontroller; DS18B20; temperature  中文译文  基于单片机AT89S51设计的温度控制系统  黄温甜,李金平  信息学院,北京联合大学,北京100101,中国  woshihwt@yahoo.com.cn, xxtjinping@buu.edu.cn  摘要:原理和单片机AT89S51单片机温度控制系统功能的基础研究,温度测量单位的1- Wire总线数字温度传感器DS18B20组成。该系统可将检测到设定温度,显示时间和保存监测数据。报警系统会给予如果温度超过了可动任意设置,然后实现自动化控制,从而达到监控的温度在一定范围内智能温度上限和下限值。在系统原则的基础上,很容易使其他非非线性控制系统,以便在合理长改变了软件设计等。该系统已被证明是准确,可靠,并通过野外实习至满意。  关键词:AT89S51单片机,微控制器,传感器DS18B20,温度。

求大神帮我看看我的单片机时钟程序,现在的问题是计数太快,尽量指出我的问题在哪里

问题很简单,假设你的晶振为12M,忽略um级的指令执行时间,你的定时器中断每4ms进入一次,并且程序显示是每4ms记一次数,4ms真心太快,我做了简单修改(不好意思,keil c很久之前就卸了,所以没有调试),让其循环250次,也就是4*250ms=1s就记一次数,你看行不行。#include <REGX51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit bee=P3^5;#define LED P0 sbit sck=P2^7;//移位时钟sbit tck=P2^6;//锁存时钟sbit data1=P2^5;//串行数据输入sbit key1=P1^5;sbit key2=P1^6;sbit key3=P1^7;sbit key4=P3^3;char code led[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0, 0xfe,0xe6};char code position[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf };void timer0();void send(uchar data8){ uchar i; sck=1; tck=1; for(i=0;i<=7;i++) {if((data8>>i)&0x01) data1=1;elsedata1=0;sck=0;sck=1;}tck=0;tck=1; }uchar a=0,b=0,c=0,d=0,e=0,f=0,m=0,temp=0;main(){ TMOD=0X01; EA=1; EX1=1; IT1=1; TH0=(65536-4000)/256; TL0=(65536-4000)%256; TR0=1; while(1) {if(temp==250){temp=0; P0=position[0]; send(led[a]); timer0(); P0=position[1]; send(led[b]); timer0(); P0=position[2]; send(led[c]); timer0(); P0=position[3]; send(led[d]); timer0(); P0=position[4]; send(led[e]); timer0(); P0=position[5]; send(led[f]); timer0();}}}void timer0(){temp++;TR0=0; TH0=(65536-4000)/256; TL0=(65536-4000)%256; m=m+1; if(m==250) {a=a+1; m=0;} if(a==10) {b=b+1; a=0;} if(b==7) {c=c+1; b=0;} if(c==10) {d=d+1; c=0;} if(d==7) {e=e+1; d=0;} if(e==10) {f=f+1; e=0;} TR0=1; }void int1()interrupt 2{ while(key1!=0) {if(key2==0) { c++;} if(key3==0){ e++;}}}

单片机上VDI,VDO,TMS,TCK,VPP分别是什么意思?

应该是JTAG接口吧,下载和调试程序用的:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线,

单片机中TH0和TL0是什么意思?

TH 0和TL0都是单片机的8位定时器。TH 0中的H即为HIGH缩写,它是表示定时器高八位。TL 0中L即为LOW缩写,它所代表为低八位。单片机定时器的工作就是,当低八位定时器满溢后,向高八位进行进位。两个八位的TH 0和TL 0构成了单片机的16为定时/计数器。扩展资料:8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合。8051单片机的两个定时器T0和T1分别都由两个特殊功能寄存器组成;T0由特殊功能寄存器TH0和TL0构成,而T1则是由TH1和TL1构成。作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器的分辨率是时钟振荡频率的1/12。作为计数器使用时,通过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号发生从1到0的负跳变时,计数器的值就自动加1;计数器的最高频率一般是时钟振荡频率的1/24。由此可知,不论是定时器还是计数器工作方式,定时器T0和T1均不占用CPU的时间,除非定时器/计数器T0和T1溢出,才可能引起CPU中断,转而去执行中断处理程序;所以说,定时器/计数器是单片机中效率高而工作灵活的部件。

单片机里的7SEG-MPX2-CC是什么?

7SEG表示七段数码管,MPX2-表示是两位,CC是表示共阴。像proteus的中英对照表,网上很多,你可以找找..

单片机dap是什么

是一个开源的下载器,可以用于对ARM系列的MCU进行程序的下载和仿真,可以用户自己制作,成本非常低,而Jlink是由SEEGER公司出品的一个仿真器,是一个商用的产品,是不开源,除了可以支持ARM系列,还可以支持很多其他的MCU。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

什么是单片机系统tick数

1. 结构体GPIO_InitTypeDef GPIO_InitStructure;这次只要配置LED的GPIO就行了,所以只有一句。2. 变量int i = 0, j = 0;好吧,和上次一样,没什么好说的。3. 配置LEDRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);和上次一样,同样不需要多说。只有一点需要注意:如果GPIO的模式为输出的话,调用GPIO配置函数之后,相应的GPIO口直接就会输出低电平。不需要调用GPIO_ResetBits函数。4. 开启系统时钟SysTick_Config(SystemCoreClock / 100);虽然只有一行代码,但是从这里开始就进入重点了。SysTick_Config是用来配置系统时钟的函数,参数可以理解为你想要的一个频率。我们假设填入的参数为n,那么系统定时器的晶振在震动n次之后,就会将中断标志位置1,并进入一次系统中断,也就是执行中断服务函数。这之后,中断标志位就会被清零,定时器继续工作。循环往复,不会停止,除非手动将定时器使能位置零。忘了说了,SystemCoreClock是一个宏,其值为72000000。5. 中断服务函数void SysTick_Handler(void){ i++; if(i == 1000) { j = !j; i = 0; } if(j == 0) GPIO_SetBits(GPIOB, GPIO_Pin_0); else if(j == 1) GPIO_ResetBits(GPIOB, GPIO_Pin_0);}

在单片机中的tick是什么概念

tick应该是“节拍”的意思即一个时间片,在多任务系统中,常采用时间片轮换的办法来保证每个任务都能得到执行,这个时间片多选为1ms,是由定时器产生的,称“滴答”定时器,每个时间片即“节拍”,它好象整个操作系统的心脏,可见其十分重要

msp430单片机和launchpad有什么关系呢?

launchpad上的主控芯片是MSP430单片机。

单片机中断控制里(IT,IE,TF,EX, ET,PX,PT)他们各自的英文全称?

IT:interrupt type controlIE: interrupt enableTF: Timer overflow flagEX: external interrupt enableET: timer interrupt enablePX: external interrupt priorityPT: Timer interrupt priority

单片机中断控制里(IT,IE,TF,EX, ET,PX,PT)他们各自的英文全称是什么?

IT:interrupt type controlIE: interrupt enableTF: Timer overflow flagEX: external interrupt enableET: timer interrupt enablePX: external interrupt priorityPT: Timer interrupt priority

单片机能直接识别英文指令吗

能。根据查询单片机相关信息得知,单片机能直接识别英文指令,因为单片机具有此功能。单片机(Microcontrollers)又称微控制器,由中央处理器、存储器、输入输出端口(包括并行I/O、串行I/O、模数转换器)、计时器和计数器等组成,具有完整数字处理功能的大规模集成电路。

求单片机系统的所有指令的英文全称,比如说(MOV是move )

MOV (Move) MOVC (Move Code) MOVX (Move External) XCH (Exchange) PUSH POP AJMP (Absolute Jump) LJMP (Long Jump) SJMP (Short Jump) JMP (Jump Indirect) JZ (Jump Zero) JNZ (Jump Not Zero) JC (Jump if Carry) JNC (Jump if Not Carry) JB (Jump if Bit is set) JNB (Jump if Not Bit) JBC (If Bit is set and Clear Bit) CJNE (Compare and Jump if Not Equal) DJNZ (Decrement and Jump if Not Zero) ACALL (Absolute Call) LCALL (Long Call) RET (Return) NOP (No Operation) ADD ADDC (Add with Carry) SUBB (Substract with Borrow) MUL (Multiply) DIV (Divide) INC (Increment) DEC (Decrement) ANL (Logical AND) ORL (Logical OR) XRL (Logical Exclusive OR) CPL (Complement) CLR (Clear) SEBT (Set Bit) RL (Rotate Left) RR (Rotate Right) RLC (Rotate Left throught the Carry flag) RRC (Rotate Right throught the Carry flag) XCHD SWAP DA (Decimal Adjust)ORG (Origin) DB (Define Byte) DW (Define Word) EQU (Equal) DATA XDATA (External Data) BIT END

单片机所有指令的英文全称

单片机是什么

51单片机“和校验”

CLR TB8 MOV A,@R0 ;GET DATA MOV SBUF,A ;SEND XRL A,R4 MOV R4,A TRAN1: JNB TI,TRAN1 ;WAIT这是XOR(异或)校验吧...把XRL A,R4改为ADD A,R4就是和校验..

单片机排阻怎么找

要搜索Resistors——RESPACK7或RESPACK8。单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器。A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期,无论是自动测量还是智能仪表的实践。都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用,让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。以上内容参考:百度百科--单片机

单片机排阻怎么找

要搜索Resistors——RESPACK7或RESPACK8。单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器。A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期,无论是自动测量还是智能仪表的实践。都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用,让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。以上内容参考:百度百科--单片机

单片机posh psw指令是什么意思

PUSH指令主要用于编写子程序和中断服务程序,可以临时保存程序状态字PSW和累加器ACC的内容 或其它寄存器和存储器单元的内容。PSW中包含(1)Cy(PSW.7)PSW.7是Cy即C,来源于最近一次算术指令或逻辑指令执行时软硬件的改写。(2)Ac(PSW.6) 辅助进位标志位,用于BCD码的十进制调整运算。当低四位向高四位借进位时Ac被置1,否则清0。此位也可和DA指令结合起来用。(3)F0(PSW.5)用户使用的状态标志位。这个你可以任意使用。(4)RS1、RS0(PSW.4、PSW.3):4组工作寄存器区选择控制位1和位0。(5)OV(PSW.2)溢出标志位 在执行算术指令时,指示运算是否产生溢出。(6)PSW.1位: 保留位,未用。(7)P(PSW.0)奇偶标志位使用这个命令的时候一般是在发生中断时,需要保护现场,以便执行完中断后,使用POP指令还原现场,从堆栈中取出被保护的数据,恢复程序状态字PSW和累加器ACC的内容 或其它寄存器和存储器单元的内容。

请教怎么解决用USB转TTL给STC单片机下程序的时候电源灯常亮的问题

[32位WIN 7]直接安装 CH341SER.EXE下载地址: http://www.wch.cn/download/list.asp?id=65若有提示:“这个INF中的服务安装段落无效”。在网上下载 “serenum.sys“ 或者 在C盘下搜索(包含系统文件和隐藏文件) serenum.sys 找到后将 serenum.sys 复制到 C:WINDOWSsystem32drivers 下 重装CH341 驱动即可。[64位WIN 7]手动指定安装目录安装 CH341SER.ZIP 下载地址: http://www.wch.cn/download/list.asp?id=5每次开机系统启动时需要按 F8选择“禁用驱动签名强制”模式在设备管理器中找到相应硬件后,选择更新驱动,然后手动指定安装目录进行安装,弹出来警示的对话框都要选择"继续安装"。我们正在申请数字签名,后期将会更新驱动

单片机密码锁怎么判断密码正确

此设计为达到模拟电子锁功能,将按要求实现以下功能:1、通过键盘输入方式模拟电子锁的功能,当输入密码错误时打不开;2、密码键盘:3位,指示开关:1个 数码管4位3、完成的具体功能:(1)通过单片机编程,设置电子锁的原始密码;(2)通过键盘键入密码;(3)通过数码管显示键入内容;(4)当输入正确密码时,显示灯闪亮一次,输入错误密码时显示灯不亮;(5)可以通过键盘输入新密码,修改原密码。READ EQU 0 ; WRITE EQU 2 ; EWEN EQU 4 ; EWDS EQU 6 ; FLGO REG 21H.0 ; CS REG P3.7 ; CLK REG P3.6DI REG P3.5DO REG P3.4ADR46 REG 20H ; ORG 00HMOV SP,#60H ; MOV R7,#00H ; DJNZ R7,$MOV P3,#10H ; MOV ADR46,#00 ; MOV A,#READ ; CALL TO9346 ; MOV 3EH,3CH ; MOV A,3EH ; CJNE A,#01H,A2SETB FLGO ; MOV R2,#03H ; MOV R0,#35HMOV ADR46,#01A1:MOV A,#READ; CALL TO9346MOV @R0,3CHDEC R0MOV @R0,3DHDEC R0INC ADR46DJNZ R2,A1JMP STARTA2: CLR FLGO; MOV R7,#10H ; MOV R6,#06 ; MOV R1,#35H ; L1:MOV A,R7 ; MOV DPTR,#TABLEMOVC A,@A+DPTRMOV @R1,A ; DEC R1 ; INC R7 ; DJNZ R6,L1START:ORL P2,#0FFH ; MOV R4,#06H ; MOV R0,#36HCLEAR:MOV @R0,#00HINC R0DJNZ R4,CLEARL2:MOV R3,#0F7H ; MOV R1,#0 ; L3:MOV A,R3 ;MOV P1,A ; MOV A,P1 ; MOV R4,A ; CLR CCPL C ; MOV R5,#04H ; L4:RLC AJNC KEYIN ; INC R1 ; DJNZ R5,L4 CALL DISP ; MOV A, R3 ; CLR CCPL C ; RRC A ; MOV R3,A ; JC L3JMP L2KEYIN: MOV A,R1 ; XRL A,#0EHJZ X4 ; MOV A,R1 ; XRL A,#0FH JZ X3 ; MOV R7,#10 ; D1: MOV R6,#248DJNZ R6,$DJNZ R7,D1D2: MOV A,P1XRL A,R4 ; JZ D2MOV A,R1 ; MOV DPTR,#TABLE ; MOVC A,@A+DPTR ; MOV R7,A ; XRL A,#0AH ; JZ SETO ; MOV A,R7 ; XRL A,#0BH ; JZ START ; MOV A,R7XRL A,#0CH ; JZ L2MOV A,R7XRL A,#0DH ;JZ L2MOV A,R7 ;XCH A,36H ;XCH A,37H ; XCH A,38H ; XCH A,39H ; XCH A,3AH ; XCH A,3BH ; CALL DISP ; JMP L2X3:JMP DISP2X4:JMP COMPDISP: MOV R0,#3BH ;DISP1: MOV A,@R0 ;ADD A,#50H ;MOV P0,A ;CALL DELAY ;DEC R0 ;MOV A,@R0ADD A,#40H ; MOV P0,A ;CALL DELAY ;DEC R0 ;MOV A,@R0ADD A,#30H ; MOV P0,A ;CALL DELAY ;DEC R0 ;MOV A,@R0ADD A,#20H ; MOV P0,A ;CALL DELAY ; DEC R0 ; MOV A,@R0ADD A,#10H ; MOV P0,A ;CALL DELAY ; DEC R0 ; MOV A,@R0ADD A,#00H ; MOV P0,A ;CALL DELAY ;RETSETO: MOV R2,#06H ; MOV R0,#36H ; MOV R1,#30H ; E1:MOV A,@R0 ;XCH A,@R1 ; INC R0INC R1DJNZ R2,E1JB FLGO,E3 ;MOV ADR46,#00 ;MOV A,#EWENCALL TO9346MOV 3CH,#01HMOV 3DH,#00HMOV A,#WRITECALL TO9346MOV A,#EWDSCALL TO9346E3:MOV R0,#35H ; MOV ADR46,#01HMOV R2,#03E4:MOV A,#EWEN ;CALL TO9346MOV 3CH,@R0 ; DEC R0 ; MOV 3DH,@R0MOV A,#WRITE ;CALL TO9346MOV A,#EWDS ; CALL TO9346DEC R0 ; INC ADR46DJNZ R2,E4CALL DELAY ;E2:JMP START COMP:MOV R1,#3BH ; MOV R0,#35H ; MOV R2,#06H ; C1:MOV A,@R1 ; XRL A,@R0JNZ C3 ; DEC R1 ; DEC R0DJNZ R2,C1MOV A,#0FEH ; MOV P2,AMOV R2,#200 ; C2:MOV R6,#248DJNZ R6,$DJNZ R2,C2C3:JMP STARTDISP2:; MOV R0,#35H ; CALL DISP1 ; MOV A,P1 ; XRL A,R4JZ DISP2 CALL DELAY ; JMP START DELAY:MOV R7,#06 ; D3:MOV R6,#248DJNZ R6,$DJNZ R7,D3RETTO9346:SETB CS ;SETB DI ;DI=1SETB CLK ;CLK=1CALL DELAY1 ; CLR CLK;CALL DELAY2MOV DPTR,#JPTBL46JMP @A+DPTR ; JPTBL46:AJMP SREAD ; AJMP SWRITE ; AJMP SEWEN ; AJMP SEWDS ; SREAD:MOV A,ADR46 ; ADD A,#80H ; CALL SDT46 ; CALL RDT46 ;MOV 3CH,ACALL RDT46 ;MOV 3DH,A JMP EX9346SWRITE:MOV A,ADR46 ; ADD A,#40H ; CALL SDT46 ; MOV A,3CH ; CALL SDT46MOV A,3DH ; CALL SDT46JMP EX9346SEWEN:MOV A,#30H ; CALL SDT46 ;MOV A,3CH ;CALL SDT46 MOV A,3DH ;CALL SDT46JMP EX9346SEWDS:CLR A ;CALL SDT46EX9346:CLR CS ;RETSDT46:MOV 22H,#8 ; SD1:RLC A MOV DI,C ; CALL DELAY1CLR CLKCALL DELAY2DJNZ 22H,SD1RETRDT46:MOV 22H,#8 ; RD1:SETB CLKCALL DELAY1CLR CLKCALL DELAY2MOV C,DO ; RLC ADJNZ 22H, RD1RETDELAY1:MOV R7,#0FHDJNZ R7,$RETDELAY2:MOV R7,#8FHDJNZ R7, $RETTABLE:DB 01H,02H,03H,0CH ; DB 04H,05H,06H,0DH ;DB 07H,08H,09H,0EH ;DB 0AH,00H,0BH,0FH ;DB 02H,02H,01H,05H,08H,02H ; END

单片机密码锁怎么判断密码正确

你只要判断后来输入的密码和原来设定的密码是否相同就可以了。相同则开锁,否则不开

51单片机MODBUS通讯,RTU中的CRC校验

51默认的数据类型为字符型。这段程序是典型的CRC16查表速算,网上一搜一大把到处都是。

单片机TCP/IP的如何使用单片机TCP/IP协议栈

用户在拿到一个单片机TCP/IP协议栈以后该如何处理呢。其中的处理分为两个部分:上层接口和下层接口。4. 1 上层接口用户使用单片机TCP/IP的目的实际非常明了,就是要实现数据的传送,即从PC机(或者另一个单片机)上传送过来的数据能够在本地单片机上接收,反之亦然。所以如果屏蔽底层的话,单片机TCP/IP协议栈就是一个传输数据的手段。所以最后归结到了使用send()、recv()函数即可。这就是使用单片机TCP/IP协议栈的核心所在。但是事实上并没有这么简单,因为对于TCP需要有发起连接、接受连接、发送数据、接收数据、关闭连接等操作以配合数据的传输。TCP/IP协议栈一般为用户提供如下的接口:1. 初始化协议栈和释放协议栈的函数接口,类似Init(), Release()之类的函数。2. 提供类似BSD socket的socket, sendto, recvfro, connect, bind, listen, accept, send, recv, closesocket, shutdown, getpeername, getsockname, htonl, htons, ntohl, ntohs, inet_addr,inet_ntoa,ioctlsocket,setsockopt, getsockopt,select等API函数,用户调用此类函数进行发起连接、接受连接、发送数据、接收数据、关闭连接等操作。3. 接受连接、接收数据、被动关闭的处理:由于此类操作是上位机发起的,所以TCP/IP协议栈必须提供一套机制来处理此类事件的发生。一般来说有两种方法:a) 主动等待:例如使用BSD的recv()函数等待数据的到来。b) 回调机制:采用类似MFC的OnReceive()函数的回调机制,也即是说在接收到数据的时候会自动调用OnReceive()函数。那么用户如何使用以上的接口来实现远程控制、远程数据采集呢?方法很简单。例如现在需要实现一个对LED灯的亮和灭的远程控制应用。首先PC机使用TCP/IP发送工具例如SocketDlgTest程序发送一个字节的“1”到开发板(根据开发板的IP地址发送)。开发板在OnReceive函数中发现收到的是“1”,那么就通过P1端口将灯打开;反之如果收到的是“0”则将灯熄灭。如果是实现一个远程数据采集的应用,例如定时进行温度采集。首先PC机使用SocketDlgTest程序等待发来数据。开发板每隔一段时间采集一个数据,然后通过send()函数将数据发送给PC机(根据PC机的IP地址发送),这样PC就接收到了当前的远程温度数据。4. 1 下层接口下层接口是一个比较复杂的部分,实际上是TCP/IP协议栈和底层硬件的对接问题。如果用户将TCP/IP协议栈移植到自己的单片机系统上。由于硬件上存在一定的差异,就需要修改底层代码。这里需要包括:1.网卡驱动:如果TCP/IP协议栈已经提供了网卡驱动,并且驱动和用户使用的网卡芯片一样,那么就相对容易一些。这里只需要修改网卡的基地址即可。否则需要自己动手写驱动程序。如果网卡采用RTL8019AS可以参考老古开发网的单片机与TCP/IP网络。如果网卡采用CS8900,可以参考《嵌入式 TCP/IP 协议单片机技术在网络通信中的应用》2.TCP/IP底层接口。一般单片机TCP/IP需要底层为其提供定时中断、网卡中断处理的入口。底层需要做相应的处理。

51单片机8个数码管功:先让第一个数码管显示某字符,保持前面数码管点亮再点亮下一个数码管并任意显示

楼主有电路吗?

单片机C程序编程,不用定时器,用delay

看你电路啊,共阴还共阳,怎么驱动的。给个电路看看吧

求基于51单片机无线模块nrf24l01程序

刚好正在研究,网上找的,稍改了一下,2015.8.17晚试验接收方应该没问题,但发送方上电一次只能发2 个数据,想再发,单片机复位也不行必须重新给NRF24L01上电 有的网友则只能发一次单片机用STC12C5A32S2,但硬件SPI不成功,用的是普通IO模拟SPI#include <reg52.h>//#include "STC12C5A.H"#include <intrins.h>#define uint unsigned int#define uchar unsigned char//****************************************IO端口定义***************************************sbit CE=P0^0;sbit CSN=P0^1;sbit SCK=P0^2;sbit MOSI=P0^3; //管脚配置 sbit MISO=P0^4; sbit IRQ=P0^5; sbit diola=P2^5;//发光二极管锁存端sbit duanla=P2^6;//段锁存端 tx-1c开发板sbit weila=P2^7;//位锁存端//************************************按键***************************************************sbit KEY1=P3^4;uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//*********************************************NRF24L01*************************************#define TX_ADR_WIDTH 5 // 5 uints TX address width#define RX_ADR_WIDTH 5 // 5 uints RX address width#define TX_PLOAD_WIDTH 20 // 20 uints TX payload#define RX_PLOAD_WIDTH 20 // 20 uints TX payloaduchar TX_ADDRESS[TX_ADR_WIDTH]= {0x12,0x34,0x56,0x78,0x90}; //本地地址uchar RX_ADDRESS[RX_ADR_WIDTH]= {0x12,0x34,0x56,0x78,0x90}; //接收地址//***************************************NRF24L01寄存器指令#define READ_REG 0x00 // 读寄存器指令#define WRITE_REG 0x20 // 写寄存器指令#define RD_RX_PLOAD 0x61 // 读取接收数据指令#define WR_TX_PLOAD 0xA0 // 写待发数据指令#define FLUSH_TX 0xE1 // 冲洗发送 FIFO指令#define FLUSH_RX 0xE2 // 冲洗接收 FIFO指令#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令#define NOP 0xFF // 保留//*************************************SPI(nRF24L01)寄存器地址#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 // 自动应答功能设置#define EN_RXADDR 0x02 // 可用信道设置#define SETUP_AW 0x03 // 收发地址宽度设置#define SETUP_RETR 0x04 // 自动重发功能设置#define RF_CH 0x05 // 工作频率设置#define RF_SETUP 0x06 // 发射速率、功耗功能设置#define STATUS 0x07 // 状态寄存器#define OBSERVE_TX 0x08 // 发送监测功能#define CD 0x09 // 地址检测 #define RX_ADDR_P0 0x0A // 频道0接收数据地址#define RX_ADDR_P1 0x0B // 频道1接收数据地址#define RX_ADDR_P2 0x0C // 频道2接收数据地址#define RX_ADDR_P3 0x0D // 频道3接收数据地址#define RX_ADDR_P4 0x0E // 频道4接收数据地址#define RX_ADDR_P5 0x0F // 频道5接收数据地址#define TX_ADDR 0x10 // 发送地址寄存器#define RX_PW_P0 0x11 // 接收频道0接收数据长度#define RX_PW_P1 0x12 // 接收频道0接收数据长度#define RX_PW_P2 0x13 // 接收频道0接收数据长度#define RX_PW_P3 0x14 // 接收频道0接收数据长度#define RX_PW_P4 0x15 // 接收频道0接收数据长度#define RX_PW_P5 0x16 // 接收频道0接收数据长度#define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置uchar sta; //状态标志#define RX_DR (sta & 0x40)#define TX_DS (sta & 0x20)#define MAX_RT (sta & 0x10)//*****************************************长延时*****************************************void Delay(unsigned int s){ unsigned int i; for(i=0; i<s; i++); for(i=0; i<s; i++); for(i=0; i<s; i++); for(i=0; i<s; i++);}//******************************************************************************************//***********毫秒延时程序********************/void delayms(unsigned int count){ unsigned int i,j; for(i=0;i<count;i++) for(j=0;j<850;j++);}//****************************************************************************************//NRF24L01初始化void init_NRF24L01(void){ delayms(1); CE=0; // chip enable CSN=1; // Spi disable SCK=0; // Spi clock line init high SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0 SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB}//***************************************************************************************************//函数:uint SPI_RW(uint uchar)//功能:NRF24L01的SPI写时序//***************************************************************************************************/uchar SPI_RW(uchar byte){ uchar i; for(i=0;i<8;i++) // output 8-bit { MOSI = (byte & 0x80); // output "uchar", MSB to MOSI byte = (byte << 1); // shift next bit into MSB.. SCK = 1; _nop_(); // Set SCK high.. byte |= MISO; // capture current MISO bit SCK = 0; // ..then set SCK low again _nop_(); } return(byte); // return read uchar}//***************************************************************************************************//函数:uchar SPI_Read(uchar reg)//功能:NRF24L01的SPI时序/****************************************************************************************************/uchar SPI_Read(uchar reg){ uchar reg_val; CSN = 0; // CSN low, initialize SPI communication... SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0); // ..then read registervalue CSN = 1; // CSN high, terminate SPI communication return(reg_val); // return register value}//***************************************************************************************************///功能:NRF24L01读写寄存器函数//***************************************************************************************************/uchar SPI_RW_Reg(uchar reg, uchar value){ uchar status; CSN = 0; // CSN low, init SPI transaction status = SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. CSN = 1; // CSN high again return(status); // return nRF24L01 status uchar}//***************************************************************************************************///函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数//***************************************************************************************************/uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar num){ uchar status,i; CSN = 0; // Set CSN low, init SPI tranaction status = SPI_RW(reg); // Select register to write to and read status uchar for(i=0;i<num;i++) pBuf[i] = SPI_RW(0); // CSN = 1; return(status); // return nRF24L01 status uchar}//******************************************************************************************************//函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)//功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数//******************************************************************************************************/uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar num){ uchar status,i; CSN = 0; //SPI使能 status = SPI_RW(reg); for(i=0; i<num; i++) // SPI_RW(*pBuf++); CSN = 1; //关闭SPI return(status); // }//***************************************************************************************************///函数:void SetRX_Mode(void)//功能:数据接收配置 //***************************************************************************************************/void SetRX_Mode(void){ CE=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收 CE = 1; delayms(1);}//*****************************************************************************************************///函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)//功能:数据读取后放如rx_buf接收缓冲区中/******************************************************************************************************/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf){ unsigned char revale=0; sta=SPI_Read(STATUS); // 读取状态寄存器来判断数据接收状况 if(RX_DR) // 判断是否接收到数据 { CE = 0; //SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer revale =1; //读取数据完成标志 } SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清除中断标志 return revale;}//*******************************************************************************************************//函数:void nRF24L01_TxPacket(unsigned char * tx_buf)//功能:发送 tx_buf中数据//******************************************************************************************************/void nRF24L01_TxPacket(unsigned char * tx_buf){ CE=0; //StandBy I模式 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送 CE=1; //置高CE,激发数据发送 delayms(1);}//*******************************接收方主函数******************************************************void main(void){ unsigned char TxBuf[20]={0};// unsigned char RxBuf[20]={0}; unsigned char led_num,aa=0; diola=1; P1=0X0F;//几个指示灯闪亮,没实际作用 delayms(2000); P1=0XF0; delayms(2000); P0=0XFF;//数码管全关 weila=1; weila=0; init_NRF24L01() ; while(1) { delayms(100); SetRX_Mode(); //  接收模式 一直循环。 nRF24L01_RxPacket(RxBuf); if(RX_DR==0) P1=~RxBuf[1]; } }//发射方主程序void main(void){ unsigned char TxBuf[20]={0}; // unsigned char RxBuf[20]={0}; unsigned char led_num; delayms(100); init_NRF24L01() ; TxBuf[1] = 0x55 ; delayms(100); nRF24L01_TxPacket(TxBuf); // 第一次发 led1=0; delayms(1000); led1=1; led_num=0x50; while(1) { //init_NRF24L01() ; if(KEY1 ==0 ) { TxBuf[1] =led_num ;   led_num++; nRF24L01_TxPacket(TxBuf); // 按下按键再发,可惜只能发一次 Delay(500); } }}

51单片机动态显示学号后8位

uchar buff[8]={1,2,3,4,5,6,7,8};//假设12345678就是你的学号後8位uchar table[10]={..............};//0-9的七段码while(1){for(i=0;i<8;i++) { weila=1;//打开位锁存器 P0=1<<i;//送位码 weila=0; delay_ms(2); duanla=1;//打开段锁存器 P0=table[ 7-i];//送段码 duana=0; delay_ms(2); } 这里还可以加其它语句,但不要占用时间太长}

编程:使用单片机P1口控制8个LED。显示方式:自上而下逐个点亮,再自下而上逐个点亮,如此循环

晕 头一次看到 要汇编的

89s52单片机中DISPLAY是什么

请问楼主 能说具体点吗 display是在程序里面出现的还是在硬件出现的

单片机#include中的_iror_是什么函数?

_iror_ 整数循环右移

C单片机编程using是什么意思?

是选择通用寄存器的第几组,0-3为可选项,默认为0.

单片机用计时中断控制一个流水灯电路 :每按一次键,发光二极管位置右移一次;每按一次键流水灯的方向改变

已经调试和仿真。用两种语言编写。程序中加了按键防抖和按键释放判断功能。/*STC51单片机编程实验第一课:彩灯控制器设计(跑马灯))*//*以下为汇编语言*/key0 bit P2.0key1 bit P2.1 org 0000h jmp start org 0030hstart: mov P0,#11111110BBegin:;**************************************** jb key0,next0 call delay10ms jb key0,next0 jnb key0,$ mov a,P0 rr a mov P0,anext0: jb key1,Begin call delay10ms jb key1,Begin jnb key1,$ mov a,P0 rl a mov P0,a jmp Begin;**************************************** delay10ms: mov r6,#200lpr6: mov r7,#248 djnz r7,$ djnz r6,lpr6 ret jmp $ end/*以下为对应的C语言如下:*/#include <AT89X51.H>sbit key0=P2^0;sbit key1=P2^1;void delay10ms();void main(){ P0=0xff-1; while(1) { unsigned char temp0,temp1; if(!key0) { delay10ms(); if(!key0) { temp0=P0<<1; temp1=P0>>7; P0=temp0+temp1; } while(!key0); } if(!key1) { delay10ms(); if(!key1) { temp0=P0>>1; temp1=P0<<7; P0=temp0+temp1; } while(!key1); } }}void delay10ms(){ unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--);}*/ 以上程序只是键控灯移,下面是另一个程序:键控改变流水灯方向。已经仿真调试通过。key0 bit P2.0key1 bit P2.1 org 0000h jmp start org 0030hstart: mov P0,#11111110Bst: jnb key0,next0 jnb key1,next1 jmp stnext0: call delay10ms jb key0,st jnb key0,$ jmp Program01next1: call delay10ms jb key1,st jnb key1,$ jmp Program02Program01:;**************************************** jb key1,nextA call delay10ms jb key1,nextA jnb key1,$ jmp Program02nextA: mov a,P0 rr a mov P0,a call delay300ms jmp Program01Program02: jb key0,nextB call delay10ms jb key0,nextB jnb key0,$ jmp Program01nextB: mov a,P0 rl a mov P0,a call delay300ms jmp Program02;**************************************** delay300ms: mov r5,#3lpr5: call delay10ms djnz r5,lpr5 ret delay10ms: mov r6,#200lpr6: mov r7,#248 djnz r7,$ djnz r6,lpr6 ret jmp $ end

51单片机中using的用法

c51单片机编译器在编译程序时会自动分配工作组,通常省略不写,没有默认使用哪组,如果你要知道使用哪组,你可以用using自己分配一个啊。

求八段显示管(单片机)显示自己学号。用汇编语言写程序。如:090309

很简单吧

单片机程序:P1口接8盏LED灯,8盏LED灯循环点亮,间隔时间为50ms,用延时子程序实现

我认为你在吹牛逼

单片机逻辑或指令在现实中的用法?

找个例子程序看看,逐句分析一下

单片机16位原码右移一位的程序

单片机16位原码右移以为,这是汇编语言中的指令,是对累加器A中的8位数依此向左移一位,还分带Cy的移位和不带Cy的移位。指令分别为:RLCA;带Cy的右移位;RLA;不带Cy的移位。以RLA为例说明:假如A=10110010,则左移位一次后,这8位数向左移一位,最高位回到最低位,就像是8个人转了一圈似。移位后,A=01100101

单片机中,ACC寄存器是什么用途?怎么使用?具体存在哪个地方?

ACC 的地址。 什么用途? 怎么使用?自己看书去吧。这题目,就是背书,没有任何的技术含量。出题的老师,太懒了,一点都不动脑子。

单片机里的"rl a"是什么意思?

一条汇编语言程序语句;作用是:使累加器A的内容(8个位)循环向左移动一位;例如:原来A=00000001执行指令后A的内容变成了00000010;运算结果保存在A里;不影响CY进位标志位;和这个对应的指令是循环右移(RR A)

51单片机中using的用法

51单片机中using使用在C51编程中,用来在中断函数中指定工作寄存器区,工作寄存器共有4个区,分别代表R0~R7地址是:第0工作区:00H~07H第1工作区:08H~0FH第2工作区:10H~17H第3工作区:18H~1FHusing n,那么n就是第几区,使用方法如下:void exterint0() interrupt 0 using 1 这表示外部中断0使用第1工作区地址。

请问这个单片机的时序图应该怎么看?

这是带有时间参数的时序图,是生产厂家根据芯片性能制定的指标,供硬件设计者参考。从图中可以看出:CPU 的读信号(RD)是时间的基准点,在 RD 稳定期间,地址信号(A0~A7)、片选信号(CS)必须最先建立,最迟撤出。其次是外设的数据信号(Port Input)。而数据线(D7~D0)上的数据有效时间是滞后的。工作过程:单片机通过地址选中外设,外设发出数据并保持足够的时间,CPU 读入数据。同理,CPU 向外设发出数据,也是地址、数据、写信号(WR)相互嵌套着。RAM 的读、写也是一样的时序,只是延时时间不同。自己动手组装兼容机,不同速度的 CPU,要配不同速度的主板、内存条,道理是一样的。

单片机的时序图怎么看?

时序图是从开始严格对齐画的,竖着的方向表示要在同一时刻某些引脚该出现的状态,才能实现相应的功能。

单片机芯片时序图究竟怎么看?

操作时序:在此,我们可以先不读出它的数据的状态或者数据本身。所以只需要看两个写时序:① 当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。② 当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图:大家要慢慢学会看时序图,要知道操作一个器件的精华便蕴藏在其中,看懂看准了时序,你操控这个芯片就是非常容易的事了。1602的时序是我见过的一个最简单的时序:1、注意时间轴,如果没有标明(其实大部分也都是不标明的),那么从左往右的方向为时间正向轴,即时间在增长。2、上图框出并注明了看懂此图的一些常识:(1).时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。(2).有线交叉状的部分,表示电平在变化,如上所标注。(3).应该比较容易理解,如上图右上角所示,两条平行线分别对应高低电平,也正好吻合(2)中电平变化的说法。(4).上图下,密封的菱形部分,注意要密封,表示数据有效,Valid Data这个词也显示了这点。3、需要十分严重注意的是,时序图里各个引脚的电平变化,基于的时间轴是一致的。一定要严格按照时间轴的增长方向来精确地观察时序图。要让器件严格的遵守时序图的变化。在类似于18B20这样的单总线器件对此要求尤为严格。4、以上几点,并不是LCD1602的时序图所特有的,绝大部分的时序图都遵循着这样的一般规则,所以大家要慢慢的习惯于这样的规则。也许你还注意到了上面有许多关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。

单片机 时序图 波形怎么看懂 怎么看呀 大哥大姐帮忙呀 在线等哦

所谓时序图,可以理解为按照时间顺序进行的图解,在时序图上可以反应出某一时刻各信号的取值情况。时序图可以这样看:按照从上到下,从左到右的顺序,每到一个突变点(从0变为1,或从1变为0)时,记录各信号的值,就可获得一张真值表,进而分析可知其相应的功能。对于单片机,看懂时序图的最终目标是要用编程实现时序图的功能,进而得到所需的实际功能。如果时序图真的不容易看懂,可以先找些简单的时序图,再找些现成的程序,对应起来看,这样的话往往事半功倍,更容易理解。单片机中对于液晶(如LCD1602)的控制时序图相对容易,适合初学入门,认真理解是很有好处的!

val是什么指令单片机

val不是单片机指令,只是一个变量而已。

求一段可运行的基于单片机PIC 32MX795F512L 的C语言代码(流水灯)

你从microchip官网上下一些PIC32的例程就行啦,各种外设接口的例程都有,下面是定时中断的一个例程。在Debug模式下能正常进中断,RD0接口的LED闪烁表示芯片是好的#include <plib.h>// Configuration Bit settings// SYSCLK = 72 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)// PBCLK = 36 MHz// Primary Osc w/PLL (XT+,HS+,EC+PLL)// WDT OFF// Other options are don"t care//#pragma config FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2// Let compile time pre-processor calculate the PR1 (period)#define FOSC 72E6#define PB_DIV 8#define PRESCALE 256#define TOGGLES_PER_SEC 1#define T1_TICK (FOSC/PB_DIV/PRESCALE/TOGGLES_PER_SEC)int main(void){ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //STEP 1. Configure cache, wait states and peripheral bus clock // Configure the device for maximum performance. // This macro sets flash wait states, PBCLK divider and DRM wait states based on the specified // clock frequency. It also turns on the cache mode if avaialble. // Based on the current frequency, the PBCLK divider will be set at 1:2. This knoweldge // is required to correctly set UART baud rate, timer reload value and other time sensitive // setting. SYSTEMConfigPerformance(FOSC); // Override PBDIV to 1:8 for this timer example mOSCSetPBDIV(OSC_PB_DIV_8); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 2. configure Timer 1 using internal clock, 1:256 prescale OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, T1_TICK); // set up the timer interrupt with a priority of 2 ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2); // enable multi-vector interrupts INTEnableSystemMultiVectoredInt(); // configure PORTD.RD0 = output mPORTDSetPinsDigitalOut(BIT_0); while(1);} //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 3. configure the Timer 1 interrupt handlervoid __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void){ // clear the interrupt flag mT1ClearIntFlag(); // .. things to do // .. in this case, toggle the LED mPORTDToggleBits(BIT_0);}

eda技术与单片机有什么区别?

EDA是对电路板的设计,用元器件相互连接地电路构成的电路板,实现电路的功能.而单片机是用程序来编写,实现电路的功能,EDAJ是很好学,但单片机就有点儿难!

EDA技术与单片机技术有什么不同

EDA技术一般指可编程控制器,CPLD或者FPGA,内部全部由逻辑门组成。有硬件描述语言或者图形输入的形式设计其功能,下载到芯片的文件实际是一个网表文件,就是描述内部本来互不相连的逻辑门通过连接实现特定功能。就想我们用与或非逻辑门在搭电路一样,只不过集成到一个芯片里了。而单片机实际上内部有一个CPU,我们编写的程序类似计算机程序一样是一条一条的指令执行。在一个时钟周期只能执行一个动作。有些大规模的FPGA可以通过软核的形式在里面生成一个单片机,而单片机所需的外围电路也可以做进去。

EDA,单片机是做什么用的?

单片机就是让内内外外都相同的一块集成电路(MCU)实现千千万万个不同的具体功能!这就是单片机,也是单片机神奇之处,单片机只是一块IC,但是它可以在您的指挥下实现无限的功能!   单片机产品开发和用电脑打字软件打印一份通知没有区别,只不过,一个是将文字信息打印到纸上让大家看,一个是将代码指令烧录到集成电路中让产品工作。这都要用到一些工具:电脑是必备的;字处理软件等于单片机开发软件;打印机等于烧录器;白纸等于空白的MCU。如果用户自己有了电脑,那么再花198元购买本的STC编程实验开发板就行了。 电子设计自动化(EDA)技术是以计算机科学和微电子技术发展为先导,汇集了计算机图形学、拓扑逻辑学、微电子工艺与结构等多种学科的先进技术,它是在计算机工作平台上产生的电子系统设计的应用技术。 EDA技术已经渗透到各行各业

eda技术与单片机有什么区别?

EDA是对电路板的设计,用元器件相互连接地电路构成的电路板,实现电路的功能.而单片机是用程序来编写,实现电路的功能,EDAJ是很好学,但单片机就有点儿难!

单片机中的 ESD 或 ESD保护 是什么意思 ?

ESD是静电放电的意思。由于ESD会损坏单片机芯片,所以要采取对其的保护,就叫ESD保护。

单片机中的 ESD 或 ESD保护 是什么意思 ?

esd是静电放电的意思。由于esd会损坏单片机芯片,所以要采取对其的保护,就叫esd保护。

单片机中断控制里(IT,IE,TF,EX, ET,PX,PT)他们各自的英文全称是什么?

1、IT:interrupt type control2、IE: interrupt enable3、TF: Timer overflow flag4、EX: external interrupt enable5、ET: timer interrupt enable6、PX: external interrupt priority7、PT: Timer interrupt priority

51单片机 sbit LSA = P2^2; 变量LSA是什么意思?英文全拼是啥有大佬知道吗?

这是用C语言写单片机程序时用的语句,sbit LSA = P2^2; 其实变量LSA只是表示一个引脚名,并非有什么英文全拼。用sbit 定义引脚名时,本就是可以随便写的符号。用这个符号肯定是因为在原理图(或仿真图)中用了74LS138译码器,多是用于8位共阴数码管的位驱动。用单片机3个引脚接译码器的ABC三个脚,然后定义单片机的这三个脚,LS应该是取74LS138中的字母,LSA、LSB、LSC就是分别接ABC的三个脚。或者说,就是写程序的人自己随便写的符号,又何必纠结要英文全拼。

单片机里的FlexMemory是什么意思?

闪存

单片机的程序是否可以进行上载?

如果单片机程序没有加密的话可以读出二进制数据。如果加密了就读不出来了。

PIC单片机的volatile定义的地址到底有什么作用

/******************************************************************************************************************** 一看给就是C语言没有学好,voatile 是易变的、不稳定的意思,volatile是一种类型修饰符,用它修饰变量表示可以被某些编译器未知的因素更改,不如操作系统硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 先看看下面的例子: volatile int i=10; int j = i ;//(3) 语句 int k = i;//(4) 语句volatile关键字告诉编译器i 是随时可能发生变化的,每次使用它的时候必须从内存中取出i的值,因而编译器生成的汇编代码会重新从i 的地址处读取数据放在k 中。这样看来,如果i 是一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就容易出错,所以说volatile可以保证对特殊地址的稳定访问。*******************************************************************************************************************/

单片机如何实现调用API函数对其它芯片进行配置?

首先定义函数并使用function关键字。比如我做了一个函数函数mis(x,y)if x=1 thenresponse.Write("<script language="javascript">")response.Write("alert(""+y+""); ")response.Write("window.history.back();")response.Write("</script>")response.End()end if x=2 thenresponse.Write("<script language=" javascript">")response.Write("alert("Incorrect message");")response.Write("window.location=""+y+"";")response. write("</script>")response.End()end ifend 如果调用,直接调用mis(1,"用户密码错误")

设置单片机内部计数器T0计数,按方式2工作,对T0引脚(p3.4)手动输入单脉冲

你好!是仿真实现还是做的实物?

单片机·汇编初学者求教高手:80c51用定时器在p1.0管脚上产生一周期为2ms的方波,时钟频率为12MHz

ORG 00HAJMP MAINORG 0BHAJMP T0INTORG 30HMAIN:ACALL INIT_INT0AJMP $INIT_INT0:MOV TMOD,#01HMOV TH0,#0FCHMOV TL0,#18HSETB EASETB ET0SETB TR0RETT0INT:MOV TH0,#0FCHMOV TL0,#18HCPL P1.0RETIEND方式0,TMOD=#00H方式1,TMOD=#01H方式2,TMOD=#02H方式3,TMOD=#03H

单片机中的定时器1的方式二的用法

需键入文字内容及代码,劳动量较大,若增加奖励分,我才动手解答。

设单片机晶振频率12mhz,使用定时器1以工作方式1产生周期为100ms的等宽方波

/*******************************************************************************************************//*******************************************************************************************************/#include <reg51.h>sbit LED=P1^1;int n;void Time1(void);//定时器初始化/*******************************************************************************************************//*******************************************************************************************************/void main(void){ n=0; Time1(); while(1);} /*******************************************************************************************************//*******************************************************************************************************/void int1() interrupt 1 //中断{ TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++; if(n>100)//间隔时间 { n=0; LED = ~LED; }}/*******************************************************************************************************//*******************************************************************************************************/void Time1(void)//定时器初始化{ TMOD=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;//启动定时器}/*******************************************************************************************************//*******************************************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////////////////

1.若晶振频率为12MHZ计算单片机的最大和最小的定时时间

1.若晶振频率为12MHZ计算单片机的最大和最小的定时时间--单片机的最大定时时间:无限。--单片机的最小定时时间:1us。 单片机计算2.晶振频率为12MHZ,在INT1引脚接一个按钮到地。按一下申请一次中断,中断服务为依次点亮8盏灯中一盏。ORG 0000H SJMP START ORG 0013H RL A MOV P1, A RETISTART: MOV IE, #84H MOV A, #127 MOV P1, A SJMP $END

51单片机汇编语言问题,急求回答!

ORG 0000HLJMP MAINORG 000BHCPL P1.7RETIORG 001BHCPL P1.0RETIORG 0030HMAIN: MOV TMOD,#26H MOV TH0,#(256-5) MOV TL0,#(256-5) MOV TH1,#(256-40) MOV TL1,#(256-40) SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA SJMP $ END

单片机问题

强悍..测验卷都发上来了

单片机汇编程序 看不懂了

虽然我不懂,但是你最好去学下汇编得知识.汇编是玩黑技术得人不可缺小的.靠人不如靠自己.靠别人没用的,难道一有问题就问人?这不太可能吧.最好自己学汇编.我也是自己在学汇编了.虽然很难!介绍本汇编的书给你 "作者:王爽 书名<<汇编语言>>第2版 " 很好的书.

单片机中断的问题

P1.0有没有加上接电阻?或者硬件没接好?程序没有问题的或者换P2。0为其他脚试试

单片机问题

HOUR EQU 030H ;小时缓存 MINUTE EQU 031H ;分钟缓存 SECOND EQU 032H ;秒缓存 DHOUR EQU 040H ;定时小时缓存DMINUTE EQU 041H ;定时分钟缓存 AJBZ EQU 042H ;按键次数标志 DSBZ EQU 022H ;定时开关标志COUNT1 EQU 033H ;总计数到4000:拆分成40*100 总计数1COUNT2 EQU 034HSPL EQU 020H ;闪烁判断的依据SET_BTN EQU 021H ;按键标志位 ORG 0000H AJMP MAIN ORG 001BH ;定时计数器T1中断入口地址 AJMP IT_1 ORG 040H MAIN:MOV SPL,#00H ;闪烁标志清零 MOV DPTR,#TABLE ;码段首地址 MOV HOUR,#00H ;小时缓存清零 MOV MINUTE,#00H ;分缓存清零 MOV DHOUR,#00H ;定时小时缓存清零 MOV DMINUTE,#00H ;定时分缓存清零 MOV SECOND,#00H ;秒缓存清零 MOV AJBZ,#00H ;按键次数缓存清零 MOV COUNT1,#00H ;总计数1清零 MOV COUNT2,#00H ;总计数2清零 MOV DHOUR,#00H ;定时小时地址清零 MOV DSBZ,#00H ;定时开关标志清零 CLR P3.0 ;定时时间到控制位清零 MOV TMOD,#20H ;设置计数方式 MOV TH1,#06H ;定时计数器T1高八位初值 MOV TL1,#06H ;定时计数器低八位初值 MOV IE,#10001000B ;设置允许中断,并且打开两个定时器 SETB TR1 LOOP:JNB P0.0,JUST_TIME ;P0.0为零跳转(调时操作) JB SET_BTN.0,JUST_TIME ;标志位为1跳转 JNB P0.1, SUBB_TIME ;减操作 JB SET_BTN.1,SUBB_TIME JNB P0.2, ADD_TIME ;加操作 JB SET_BTN.2,ADD_TIME JB P0.7,TIME CLR P3.0 TIME1:JB SPL.3,DSXS ;转定时小时显示 JB SPL.4,DSXS ;转定时分钟显示 JB SPL.5,DSXS ;转定时开关显示 ACALL HOUR_SHOW ;小时显示 ACALL MINUTE_SHOW ;分钟显示 ACALL SECOND_SHOW ;秒显示 FHLOOP:AJMP LOOP DSXS:ACALL DHOUR_SHOW ;定时小时显示 ACALL DMINUTE_SHOW ;定时分钟显示 ACALL DSECOND_SHOW ;定时开关显示 AJMP LOOPJUST_TIME: LJMP JUST_TIME1SUBB_TIME: JB SET_BTN.1,WAIT_BTN2_UP ACALL DELAY2; JB P0.1, TIME SETB SET_BTN.1 JB SPL.1,SUBB_HOUR JB SPL.2,SUBB_MIN JB SPL.3,DSUBB_HOUR JB SPL.4,DSUBB_MIN JB SPL.5,GDS AJMP TIMEADD_TIME: LJMP ADDTIMESUBB_MIN: MOV R1,MINUTE CJNE R1,#00H,SUBB_MIN_OPT MOV MINUTE,#3BH AJMP TIMESUBB_MIN_OPT: DEC MINUTE AJMP TIMEDSUBB_MIN: MOV R1,DMINUTE CJNE R1,#00H,DSUBB_MIN_OPT MOV DMINUTE,#3BH AJMP TIMEDSUBB_MIN_OPT: DEC DMINUTE AJMP TIMESUBB_HOUR: MOV R1,HOUR CJNE R1,#00H,SUBB_HOUR_OPT MOV HOUR,#17H AJMP TIMESUBB_HOUR_OPT: DEC HOUR AJMP TIMEDSUBB_HOUR: MOV R1,DHOUR CJNE R1,#00H,DSUBB_HOUR_OPT MOV DHOUR,#17H AJMP TIMEDSUBB_HOUR_OPT: DEC DHOUR AJMP TIMEWAIT_BTN2_UP: JNB P0.1,TIME CLR SET_BTN.1 AJMP TIME TIME:LJMP TIME1 GDS:CLR DSBZ.0 LJMP TIMEADDTIME:JB SET_BTN.2,WAIT_BTN3_UP ACALL DELAY2 JB P0.2, TIME SETB SET_BTN.2 JB SPL.1,ADD_HOUR JB SPL.2,ADD_MIN JB SPL.3,DADD_HOUR JB SPL.4,DADD_MIN JB SPL.5,KDS LJMP TIMEADD_MIN:MOV R1,MINUTE CJNE R1,#3BH,ADD_MIN_OPT MOV MINUTE,#00H LJMP TIMEADD_MIN_OPT: INC MINUTE LJMP TIMEDADD_MIN: MOV R1,DMINUTE CJNE R1,#3BH,DADD_MIN_OPT MOV DMINUTE,#00H LJMP TIMEDADD_MIN_OPT: INC DMINUTE LJMP TIMEADD_HOUR: MOV R1,HOUR CJNE R1,#17H,ADD_HOUR_OPT MOV HOUR,#00H LJMP TIMEADD_HOUR_OPT: INC HOUR LJMP TIMEDADD_HOUR: MOV R1,DHOUR CJNE R1,#17H,DADD_HOUR_OPT MOV DHOUR,#00H LJMP TIMEDADD_HOUR_OPT: INC DHOUR LJMP TIMEWAIT_BTN3_UP: JNB P0.2,TIME CLR SET_BTN.2 LJMP TIME KDS:SETB DSBZ.0 LJMP TIMEJUST_TIME1: JB SET_BTN.0,WAIT_UP ACALL DELAY2 JB P0.0, TIME SETB SET_BTN.0 MOV R1,AJBZ CJNE R1,#05H,INC1 MOV AJBZ,#00H MOV SPL,#00H LJMP TIME INC1:INC AJBZ MOV R1,AJBZ CJNE R1,#01H,JSFZ ;计时分钟 SETB SPL.1 LJMP TIME JSFZ:CJNE R1,#02H,DSX ;定时小时 CLR SPL.1 SETB SPL.2 LJMP TIME DSX:CJNE R1,#03H,DSFZ ;定时分钟 CLR SPL.2 SETB SPL.3 LJMP TIME DSFZ:CJNE R1,#04H,DSKG ;定时开关 CLR SPL.3 SETB SPL.4 DSKG:CJNE R1,#05H,LJUMP_TIME ;返回显示状态 CLR SPL.4 SETB SPL.5LJUMP_TIME: LJMP TIMEWAIT_UP:JNB P0.0,LJUMP_TIME ;等待按键松开,松开后清零按键标志 CLR SET_BTN.0 LJMP TIMEWAIT2_DL1: ACALL DELAY1 ACALL DELAY1 RETHOUR_SHOW: JNB SPL.1, HOUR_SHOW_HRER JB SPL.0, HOUR_SHOW_HRER ACALL WAIT2_DL1 RETHOUR_SHOW_HRER: ;小时显示 SETB P2.6 SETB P2.7 CLR A MOV A,HOUR MOV B,#0AH DIV AB ;小时十位在A中,个位在B中 MOVC A,@A+DPTR MOV P1,#00H ;P1口控制显示数据,此时显示小时十位数据 MOV P1,A CLR P2.7 ;P2口控制位置(低电平有效;共阴显示) ;延时 ACALL DELAY1 SETB P2.7 ;熄灭小时 MOV P1,#00H MOV A,B ;B中存放的小时各位数据放入A MOVC A,@A+DPTR MOV P1,A CLR P2.6 ;显示小时个位数据 ;延时 ACALL DELAY1 SETB P2.6 MOV P1,#00H RETMINUTE_SHOW: JNB SPL.2, MINUTE_SHOW_HERE JB SPL.0, MINUTE_SHOW_HERE ACALL WAIT2_DL1 RETMINUTE_SHOW_HERE: SETB P2.5 SETB P2.4 CLR A MOV A,MINUTE MOV B,#0AH DIV AB MOVC A,@A+DPTR MOV P1,#00H MOV P1,A CLR P2.5 ;延时 ACALL DELAY1 SETB P2.5 MOV P1,#00H MOV A,B MOVC A,@A+DPTR MOV P1,A CLR P2.4 ;延时 ACALL DELAY1 SETB P2.4 MOV P1,#00H RETSECOND_SHOW: SETB P2.3 SETB P2.2 CLR A MOV A,SECOND MOV B,#0AH DIV AB MOVC A,@A+DPTR MOV P1,#00H MOV P1,A CLR P2.3 ;延时 ACALL DELAY1 SETB P2.3 MOV P1,#00H MOV A,B MOVC A,@A+DPTR MOV P1,A CLR P2.2 ;延时 ACALL DELAY1 SETB P2.2 JNB DSBZ.0,DYFH ;定时比较开始 JB P3.0,DYFH MOV A,HOUR CJNE A,DHOUR,DYFH MOV A,MINUTE CJNE A,DMINUTE,DYFH SETB P3.0 DYFH:RETDHOUR_SHOW: ;调整定时时间显示 JNB SPL.3,XSS JB SPL.0, XSS ACALL WAIT2_DL1 RET XSS:SETB P2.6 SETB P2.7 CLR A MOV A,DHOUR MOV B,#0AH DIV AB ;小时十位在A中,个位在B中 MOVC A,@A+DPTR MOV P1,#00H ;P1口控制显示数据,此时显示小时十位数据 MOV P1,A CLR P2.7 ;P2口控制位置(低电平有效;共阴显示) ;延时 ACALL DELAY1 SETB P2.7 ;熄灭小时 MOV P1,#00H MOV A,B ;B中存放的小时个位数据放入A MOVC A,@A+DPTR MOV P1,A CLR P2.6 ;显示小时个位数据 ;延时 ACALL DELAY1 SETB P2.6 MOV P1,#00H RET ;定时分钟显示DMINUTE_SHOW: JNB SPL.4,XSF JB SPL.0, XSF ACALL WAIT2_DL1 RET XSF:SETB P2.5 SETB P2.4 CLR A MOV A,DMINUTE MOV B,#0AH DIV AB MOVC A,@A+DPTR MOV P1,#00H MOV P1,A CLR P2.5 ;延时 ACALL DELAY1 SETB P2.5 MOV P1,#00H MOV A,B MOVC A,@A+DPTR MOV P1,A CLR P2.4 ;延时 ACALL DELAY1 SETB P2.4 MOV P1,#00H RET ;定时开关显示DSECOND_SHOW: JNB SPL.5,XSM ;显示秒(定时开关) JB SPL.0,XSM ACALL WAIT2_DL1 RET XSM:SETB P2.3 SETB P2.2 CLR A MOV A,#00H MOVC A,@A+DPTR MOV P1,A CLR P2.3 ;延时 ACALL DELAY1 SETB P2.3 MOV P1,#00H JNB DSBZ.0,GBZ ;关标志 MOV A,#0BH AJMP XS GBZ:MOV A,#0AH XS:MOVC A,@A+DPTR MOV P1,A CLR P2.2 ;延时 ACALL DELAY1 SETB P2.2 MOV P1,#00H RET ;短延时 ;显示短延时 DELAY1:MOV R6,#03H DL1:MOV R7,08H DL2:DJNZ R7,DL2 DJNZ R6,DL1 RET ;按键延时 DELAY2:MOV R6,#0AH DL21:MOV R7,0AH DL22:DJNZ R7,DL22 DJNZ R6,DL21 RET IT_1:PUSH ACC PUSH B PUSH PSW INC COUNT1 MOV A,COUNT1 CJNE A,#28H,RETI_LABLE INC COUNT2 MOV COUNT1,#00H MOV A,COUNT2 MOV B,#32H DIV AB MOV A,B JNZ C2_OPT CPL P3.7 ;秒的闪烁 CPL SPL.0 ;调整闪烁 C2_OPT:MOV A,COUNT2 CJNE A,#64H,RETI_LABLE INC SECOND MOV COUNT2,#00H MOV A,SECOND CJNE A,#3CH,RETI_LABLE; INC MINUTE MOV SECOND,#00H MOV A,MINUTE CJNE A,#3CH,RETI_LABLE; INC HOUR MOV MINUTE,#00H MOV A,HOUR CJNE A,#18H,RETI_LABLE MOV HOUR,#00HRETI_LABLE: POP PSW POP B POP ACC RETI ;TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;共阴码表 TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,8EH,0C8H ;共阳码表 ; 0 1 2 3 4 5 6 7 8 9 F N END有时、分、秒显示,可以定时驱动继电器来控制你的家用电器,具体使用方法看程序吧,程序懂了你就能做出来了

求单片机高手帮忙详细解释下程序 特别是中断那

这应该是一个闪烁灯的程序,定时器以方式2自动重装的方式工作,定时器到时产生一次中断就将记数字段减一,等到计数字段减到0就改变一次LED灯的状态,这基实就是一个延时的过程。 总的来讲就是定时器每100us就产生一次中断,而每次中断就将计数字段减一,因此计数字段应该设为10000,这样就是产生10000次中断(就是10000*100us =1s)时改变一次LED灯的状态,便实现了1s的计时。Start: mov TMOD, #02h ; 方式2, 定时器 mov TH0, #t100us mov TL0, #t100us mov IE, #10000010b ; EA=1, IT0 = 1这几句是选择定时器并设置定时器工作方式,此处选择了定时器0并以工作方式2工作,方式2是自动重装,TH0减至0时,定时器到时产生中断并自动将TL0的值赋给TH0,之后重新工作。TH0和TL0决定了定时器工作起点,其中TH0是设置高八位字节,TL0是设置低八位字节(定时器总共是2个字节16位,最大值的十进制为65535)。EA=1是开总中断,IT0=1是开定时器0的中断。mov C100us, #high(Tick)mov C100us+1, #low(Tick)两句是设置计数器计数起点,C100us是高位字段,C100us+1是低位字段。T0Int: push PSW mov a, C100us+1 jnz Goon dec C100us这是定时器到时产生中断后的处理过程。先看C100us+1(即低位字段)是否为0,不为0即jnz(jump not zero)就跳转至Goon处,否则就将C100us(即高位字段)减一,然后执行Goon。Goon: dec C100us+1 mov a, C100us orl a, C100us+1 jnz Exit ; 100us 记数器不为0, 返回 mov C100us, #HIGH(TICK);#high(Tick) mov C100us+1, #LOW(TICK);#low(Tick) cpl LEDBuf ; 100us 记数器为0, 重置记数器 ; 取反LED这几句就是判断计数器是否为0。其中 orl a, C100us+1是将高位字段与低位字断“按位与”。结果若不为0(只有在高位字断与低位字断同时为0时,结果才为0)便执行EXIT,即退出;若为0则重置计数器,并将LED取反。OK就是这样了,今天下午没课,一高兴就写了这么多,不要烦啊,呵呵。

汇编语言问题 在单片机LED上显示数字(0~9)的源代码是什么啊?

有点不太明白你在问什么,LED分为8段,刚好用一组引脚来控制,给出数据控制不同的段亮就能显示不同的数据,比如3FH对应ABCDEF亮G和小数点灭就显示0了,这个就是这么简单呀

单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽

ORG 0000H;程序起始于地址0000H,(一般不这样用) LJMP MAIN;跳到主程序MAIN ORG 000BH;外部中断INT0程序的地址,此为规定的 LJMP INTT0;跳到外部中断INTT0程序 ORG 001BH;外部中断INT1程序的地址,此也为规定的 LJMP INTT1;跳到外部中断INTT1程序 ORG 0100H;主程序MAIN地址MAIN: MOV SP,#60H;给堆栈指针SP附内部数据存储器地址60H MOV 31H,#0;给31H地址内清零即(31H)=0 MOV 20H,#0FEH ;(20H)=11111110B MOV 21H,#0FFH;(21H)=11111111B MOV P1,20H;P1=11111110B LCALL SHEZHI1;调用程序段SHEZHI1 MOV 20H,#0FDH;(20H)=11111101B MOV P1,20H;P1=11111101B MOV 40H,#10;(40H)=0AH SETB EA;开总中断 SETB ET0;开定时中断T0 MOV TMOD,#11H;设置T0工作于定时方式1 MOV TH0,#3CH;定时初值设置高位 MOV TL0,#0B0H;定时初值设置低位 SETB TR0;允许T0中断LL: LCALL KEY;调用KEY LCALL KEYC;调用KEYC SJMP LL;循环调用回LLINTT0: PUSH ACC;将ACC值压栈 PUSH PSW;将PSW值继续压栈 SETB RS1;RS1位置1 SETB RS0;RS0位置1,即选中内部数据存储器组的3组 DJNZ 40H,DOWN;判断十次结束否?且计数值自减一,若没有够十次,则转入程序DOWN , 否则顺序执行 MOV 40H,#10;继续在(40H)存入计数值十 MOV R0,#41H;(R0)=41H MOV A,@R0 ; 判秒是否到60 ADD A,#1;A中值加一 DA A;十进制调整 MOV @R0,A;再送回原单元 CLR C;清进位位 SUBB A,#60H;与60相减 JC DOWN;通过判断进位位看是否到60了,没到就去DOWN,到了就顺序执行 MOV @R0,#0;41H单元清零 INC R0;地址自加一 MOV A,@R0 ; 判分是否到60 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#60H JC DOWN MOV @R0,#0 INC R0 MOV A,@R0 ; 判时是否到24 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#24H JC DOWN MOV @R0,#0 INC R0 MOV A,@R0 ; 判日是否到指定天数 ADD A,#1 DA A MOV @R0,A INC R0 MOV A,@R0 MOV R4,A ;月份送R4,本月天数送R5 JNB ACC.4,NEXT2 CLR C SUBB A,#06HNEXT2: MOV DPTR,#DAYTAB DEC A MOVC A,@A+DPTR MOV R5,A CJNE R4,#2,NEXT JNB 08H,NEXT1NEXT: INC R5NEXT1: DEC R0 MOV A,R5 CLR C SUBB A,@R0 JNC DOWN MOV @R0,#1 INC R0 MOV A,@R0 ; 判月是否到13 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#13H JC DOWN MOV @R0,#1 INC R0 MOV A,@R0 ; 判年低位是否到00 ADD A,#1 DA A MOV @R0,A INC R0 MOV A,@R0 ADDC A,#0 DA A MOV @R0,ADOWN: MOV A,#42H CJNE A,4EH,DOWN2 MOV A,#43H CJNE A,4FH,DOWN2 CLR 07HDOWN2: JB 06H,DOWN4DOWN4: CLR TR0 MOV A,#0B7H ADD A,TL0 MOV TL0,A MOV A,#3CH ADDC A,TH0 MOV TH0,A SETB TR0 POP PSW POP ACC RETIDAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H

单片机 汇编语言 求助。

ret执行完返回ACALL PTOMO的下一条指令,也就是HERE: AJMP HERE,此后单片机一直执行HERE: AJMP HERE由于T0中断间隔是1MS,T0产生中断后执行完某次HERE: AJMP HERE后执行中断将P1.0取反,执行完后RETI返回HERE: AJMP HERE继续等待中断。这样每隔1MS中断一次P1.0取反一次。P1.0每隔两个中断就会输出一个高电平,就得到你想要的2MS的方波了
 首页 上一页  12 13 14 15 16 17 18 19 20 21 22  下一页  尾页