用于直接写软盘的工具,很好很强大,给需要的兄弟
标签: 软盘
上传时间: 2017-01-05
上传用户:GavinNeko
微型计算机课程设计论文—通用微机发声程序的汇编设计 本文讲述了在微型计算机中利用可编程时间间隔定时器的通用发声程序设计,重点讲述了程序的发声原理,节拍的产生,按节拍改变的动画程序原理,并以设计一个简单的乐曲评分程序为引子,分析程序设计的细节。关键字:微机 8253 通用发声程序 动画技术 直接写屏 1. 可编程时间间隔定时器8253在通用个人计算机中,有一个可编程时间间隔定时器8253,它能够根据程序提供的计数值和工作方式,产生各种形状和各种频率的计数/定时脉冲,提供给系统各个部件使用。本设计是利用计算机控制发声的原理,编写演奏乐曲的程序。 在8253/54定时器内部有3个独立工作的计数器:计数器0,计数器1和计数器2,每个计数器都分配有一个断口地址,分别为40H,41H和42H.8253/54内部还有一个公用的控制寄存器,端地址为43H.端口地址输入到8253/54的CS,AL,A0端,分别对3个计数器和控制器寻址. 对8353/54编程时,先要设定控制字,以选择计数器,确定工作方式和计数值的格式.每计数器由三个引脚与外部联系,见教材第320页图9-1.CLK为时钟输入端,GATE为门控信号输入端,OUT为计数/定时信号输入端.每个计数器中包含一个16位计数寄存器,这个计数器时以倒计数的方式计数的,也就是说,从计数初值逐次减1,直到减为0为止. 8253/54的三个计数器是分别编程的,在对任一个计数器编程时,必须首先讲控制字节写入控制寄存器.控制字的作用是告诉8253/54选择哪个计数器工作,要求输出什么样的脉冲波形.另外,对8253/54的初始化工作还包括,向选定的计数器输入一个计数初值,因为这个计数值可以是8为的,也可以是16为的,而8253/5的数据总线是8位的,所以要用两条输出指令来写入初值.下面给出8253/54初始化程序段的一个例子,将计数器2设定为方式3,(关于计数器的工作方式参阅教材第325—330页)计数初值为65536. MOV AL,10110110B ;选择计数器2,按方式3工作,计数值是二进制格式 OUT 43H,AL ; j将控制字送入控制寄存器 MOV AL,0 ;计数初值为0 OUT 42H,AL ;将计数初值的低字节送入计数器2 OUT 42H,AL ;将计数初值的高字节送入计数器2 在IBM PC中8253/54的三个时钟端CLK0,CLK1和CLK2的输入频率都是1.1931817MHZ. PC机上的大多数I/O都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的.关于8255A的结构和工作原理及应用举例参阅教材第340—373页.教材第364页的”PC/XT机中的扬声器接口电路”一节介绍了扬声器的驱动原理,并给出了通用发声程序.本设计正是基于这个原理,通过编程,控制加到扬声器上的信号的频率,奏出乐曲的.2.发声程序的设计下面是能产生频率为f的通用发声程序:MOV AL, 10110110B ;8253控制字:通道2,先写低字节,后写高字节 ;方式3,二进制计数OUT 43H, AL ;写入控制字MOV DX, 0012H ;被除数高位MOV AX, 35DEH ;被除数低位 DIV ID ;求计数初值n,结果在AX中OUT 42H, AL ;送出低8位MOV AL, AHOUT 42H,AL ;送出高8位IN AL, 61H ;读入8255A端口B的内容MOV AH, AL ;保护B口的原状态OR AL, 03H ;使B口后两位置1,其余位保留OUT 61H,AL ;接通扬声器,使它发声
上传时间: 2013-10-17
上传用户:sunjet
这是最近做的计算机图形学实验,其界面是一个仿WINDOWS下的窗口界面,程序具有较好的交互性。全部的图形函数都没有用C语言自带的图形库函数,所写的函数都是直接写屏实现的,模拟了大部分图形库函数的功能。但也有部分没有写出,如保存图形块的getimage()等函数。由于水平有限,还有部分功能没有实现,如保存或打开BMP图片等。等有了时间再说吧。算法什么的写的很潦草,都随便说说的,欢迎高手指点,希望与广大C语言爱好者共同学习讨论
上传时间: 2013-11-25
上传用户:Ants
在Linux下调用系统函数,通过freambuffer直接写屏,填充颜色,并显示汉字
上传时间: 2014-01-13
上传用户:330402686
zd1211无线网卡驱动源代码,网卡为USB接口 你可以把摄像头的驱动在编译内核的时候直接编译进去,然后把内核烧进去,以后我们每次执行应用程序就可以了, 也可以把要执行的应用程序直接写在init.sh里边看一下,那就以后连好摄像头然后一开机,摄像头就会把采集到的图象显示在屏上。
上传时间: 2016-04-11
上传用户:tianjinfan
Delphi Tiny_Shell 3k (普通版本+端口复用穿防火墙) Tiny_Shell 0.1 (普通版本)By Anskya 某天精神好了一点的时候写的,使用KOL+删除多余资源+清除PE重定位表+FSG压缩体积只有3k. 感谢那些提供Code和教程的GG and JJ们~~ ^_^~部分代码直接翻译C的shell Tiny_Shell.dpr 工程时最简单的shell采用匿名单管道设计,本来打算不用管道直接写的,但是怕连目录都无法显示所以还是用了单管道,有个BUG-很明显的那种-就是,输入命令看不见但是可以运行,有兴趣自己改成双管道就可以了(如果不怕自己麻烦部使用管道直接将Socks获取的信息直接写入进程,也可以返回数据的^_^).
标签: Tiny_Shell Delphi Anskya 0.1
上传时间: 2016-06-12
上传用户:顶得柱
VIP专区-嵌入式/单片机编程源码精选合集系列(34)资源包含以下内容:1. lonWorks技术白皮书.2. 嵌入式Linux上的图形系统--CCGUI 中科院软件中心 苏晓峰 的讲稿.3. openGui 就不用多说了.4. PPP协议C语言源代码.5. mp3解码C语言源码,可用在嵌入式系统上.6. sqlite 嵌入式数据库的源码.7. 用c++ 类累起来的简单菜单.8. 用于S3c44b0x液晶控制器显示汉字驱动.9. 读写USB端口的VC程序.10. 嵌入式USB HOST sl811hs的驱动程序.11. 這是一堆verilog的source code.包含許多常用的小電路.還不錯用..12. 电梯门禁系统:包括系统原理图.13. 楼宇可视对讲门口机C语言源程序.14. 使用C++开发操作系统源代码.15. Linux下I2C以及I2C下的键盘驱动.16. 周立功D12开发板中带的WINDOWS XP驱动程序.17. c/c++嵌入式系统编程.18. 程序1-1 用组合语言写成的霹雳灯程序 程序1-2 改用C来处理的霹雳灯程序 程序5-1 SDCC操作程序 程序6-1 引擎点火控制器的角度侦测程序范例 程序8-1 T_8252.ASM 程序10-1.19. 嵌入式系统开发中.20. 面向实时嵌入式系统的图形用户界面支持系统――MiniGUI .doc格式 包含很多LINUX原码.21. 嵌入式环境消息队列软件.22. 适用于8位小型嵌入式系统的TCP/IP协议栈!!移植非常方便!.23. 一些常用IT缩写词解释 希望对大伙有帮助.24. jxta最新版本v2.3.X的程序编写指南.25. 用户数据报协议的程序源码.26. 适合任意点阵的LCD屏幕的液晶时钟显示程序!开发人员只用简单的修改接口定义即刻方便调用!.27. 一款适用的C51写的红外线解码程序.28. 基于sy2100 ez-usb开发板的程序.29. 一个用于嵌入式的Mini Web Server.大小只有200k. 非常适合用于机顶盒等..30. 一个用于PC直接写端口及内存的程序.31. 有关TMSF2812配制文件、初始化、中断等源代码.32. C8051F040 UART0模式1从机程序.33. c8051f040中比较器0调试程序.34. 单片要c8051f040中使用LCD测试程序例程.35. c8051f040中液晶屏初始化配置程序和显示程序例程.36. 一个基于tcpip的小聊天程序 可用于tcpip的协议开发 少作修改后可用于嵌入式的网络通讯.37. (转载)采用C语言对DSP编程具有很多优点。针对TMS320C32芯片的特点.38. 使用c8051f020的测温程序 一个内部温度的 一个外部的用AD590.39. abootLoader 固件源代码 HP内部珍贵资料!.40. 2 HP PCI热插拔代码 HP内部珍贵资料!.
上传时间: 2013-04-15
上传用户:eeworm
单片机入门基础知识大全免费下载 单片机第八课(寻址方式与指令系统) 通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051的指令部份。 一、概述 1、指令的格式 我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。 2、汇编 我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。 二、寻址 让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH这些指令都是将一些数据送到相应的位置中去,为什么要送数据呢?第一个因为送入的数可以让灯全灭掉,第二个是为了要实现延时,从这里我们可以看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。下面我们就从数据传递类指令开始吧。 分析一下MOV P1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。 这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们可以明确地知道,P1中的值是0FFH,但是并不是任何时候都可以直接给出数本身的。例如,在我们前面给出的延时程序例是这样写的: MAIN: SETB P1.0 ;(1) LCALL DELAY ;(2) CLR P1.0 ;(3) LCALL DELAY ;(4) AJMP MAIN ;(5) ;以下子程序 DELAY: MOV R7,#250 ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END ;(11) 表1 MAIN: SETB P1.0 ;(1) MOV 30H,#255 LCALL DELAY ; CLR P1.0 ;(3) MOV 30H,#200 LCALL DELAY ;(4) AJMP MAIN ;(5) ;以下子程序 DELAY: MOV R7,30H ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END ;(11) 表2 这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序还能满足要求吗?不能,怎么办?我们可以把延时程序改成这样(见表2):调用则见表2中的主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元中传过来的数确定。这样就可以满足要求。 从这里我们可以得出结论,在数据传递中要找到被传递的数,很多时候,这个数并不能直接给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作数所在单元的地址称之为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。除了这种方法之外,还有一种,如果我们把数放在工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOV A,R0就是将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H,和MOV A,R0不就没什么区别了吗?为什么要加以区分呢?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8h)就可以了。 这么斤斤计较!不就差了一个周期吗,如果是12M的晶振的话,也就1个微秒时间了,一个字节又能有多少? 不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上1000次,就是1毫秒,如果要执行1000000万次,就是1S的误差,这就很可观了,单片机做的是实时控制的事,所以必须如此“斤斤计较”。字节数同样如此。 再来提一个问题,现在我们已知,寻找操作数可以通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗? 看这个问题,要求从30H单元开始,取20个数,分别送入A累加器。 就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?是31H单元的,怎么取呢?还是只能用MOV A,31H,那么20个数,不是得20条指令才能写完吗?这里只有20个数,如果要送200个或2000个数,那岂不要写上200条或2000条命令?这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的值是30H,那么就到30H单元中去取,如果是31H就到31H单元中去取,就可以解决这个问题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就可以通过一定的方法让这里面的值发生变化,比如取完一个数后,将这个寄存器单元中的值加1,还是执行同一条指令,可是取数的对象却不一样了,不是吗。通过例子来说明吧。 MOV R7,#20 MOV R0,#30H LOOP:MOV A,@R0 INC R0 DJNZ R7,LOOP 这个例子中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。 这也是一种寻找数据的方法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,在间址寻址中,只能用R0或R1存放等寻找的数据。 二、指令 数据传递类指令 1) 以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 2)以寄存器Rn为目的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
上传时间: 2013-10-13
上传用户:3294322651
一个通用记录软件系统日志的后台程序,采用消息队列实现,可同时记录多个系统的日志,特别适合于通信软件日志,减轻通信系统直接写日志到磁盘文件的负担,加快通信软件执行速度。
上传时间: 2014-01-06
上传用户:CSUSheep
直线、圆等图形函数的汇编语言实现 本例所用的绘图函数均采用堆栈的方法传递参数,可以和C语言接口。画点的函数采用直接写显存的方法。为了直接由CPU数据确定像素颜色,而不使用位屏蔽寄存器或置位/重置寄存器,采用了VGA的写模式2方式。直线和圆的算法均采用Bresenham算法实现,其实现过程及堆栈状态均有较详细的说明。最后,将绘图函数用宏封装了起来,便于主程序中调用。当然,主程序中也可直接将参数压入堆栈。其实在较高版本的编译程序中,可以用PROTO伪指令定义函数原型,再用INVOKE伪指令调用。
上传时间: 2013-12-20
上传用户:hgy9473