51单片机定时器汇编程序

51单片机定时器汇编程序,第1张

试试下列程序

;

ORG 0000H

SJMP BEGIN

ORG 000BH

MOV TH0, #3CH ;定时100ms

MOV TL0, #0B0H

DJNZ R7, E_T0

MOV R7, #5

SETB F0 ;每500ms置一

E_T0:RETI

;------------------------------------

BEGIN:

MOV TMOD, #01H ;T0定时方式1

MOV TH0, #3CH ;50ms@12MHz

MOV TL0, #0B0H ;100ms@6MHz

MOV R7, #5

SETB TR0

SETB ET0

SETB EA

;------------------------

M_LOOP:

MOV A, #255

L1:

MOV P1, A

JNB F0, $

CLR F0

CLR C

RLC A

JC L1

;------------------------

L2:

MOV P1, A

JNB F0, $

CLR F0

SETB C

RRC A

JNC L2

;------------------------

MOV R2, #8 ;全亮全灭8次

L3:

MOV P1, #0 ;全亮

JNB F0, $

CLR F0

MOV P1, #255;全灭

JNB F0, $

CLR F0

DJNZ R2, L3

;------------------------

JMP M_LOOP

;------------------------------------

END

本程序可实现:

L1-L8依次点亮----L1-L8依次熄灭----8个灯全亮全灭8次~循环 各时序间隔05s。

用处不大,打个比方你设计一个定时程序,在某某时间段停机,问题是PLC程序并不复杂,并且容易读出,终究能看懂并且修改你的程序。我就碰到过这样的一段程序,几个小时就读懂并且改掉了。

你设计了PLC程序加密,意义也不大,现在破解软件满天飞,挡是挡不住的。要说还是计算机程序或者单片机程序比较难破解。

我有个简单想法,从plc硬件入手,PLC在掉电以后,如果拔掉电池超过5分钟程序就丢失了。依据这个原理,找两只继电器,把电池的接线引出,接一只继电器的常闭触点,PLC的电源也引出接另外一只继电器的常闭触点,再找一个以天为单位的定时器来控制继电器,比方说你设置在365天启动继电器,电池继电器和PLC继电器同时动作,PLC和电池同时掉电了,你的线路如果设计的隐蔽,等设备维护人员查到问题,肯定就超过5分钟了,程序丢失,就达到目的了。

这种办法毕竟对设备有危险,突然停机可能造成不可预料的情况,不是很可取。所以最佳途径是签好合同每一个细节,如果对方抵赖,就通过法律手段解决。

最近在网上搜索了一些关于实现关机 重启 注销的文章 发现大多介绍的是VB NET 用API实现这些功能 且在XPsp 环境下无法正常的关机与注销 而对于VB NET 的介绍几乎没有 本文章所涉及的知识点有

用实现关机 重启 注销功能 通过使用textbox与timer控件的结合编写定时器功能 为你的程序加上超链接

本篇文章具有一定的基础性和广泛的实用性 相信能够给 初学者带来一定的帮助

本文所使用的编程环境是Microsoft Visual Studio 首先打开 Visual Studio 在文件 (File) 菜单上 单击新建项目 (New Project) 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中 单击 Windows 应用程序 (Windows Application) 单击确定 (OK)

具体步骤如下

首先在Form 窗体上添加一个Label 控件属性text设置为:今天: 然后分别添加 个button控件name分别为button button button 它们的text属性分别为 关闭计算机(启动定时器) 注销 重新启动

现在我们就需要为程序加上一个定时器了 这个定时器需要与textbox 控件相关联 输入正确时间格式后就可以启动定时功能了 然后我们需要在窗体上添加一个timer 一个textbox 控件 和一个RadioButton 控件 让它们保留默认值不变 其中 TextBox 控件的text属性设置为 : : RadioButton 控件text设置为 指定时间关机|时间格式 小时: 分钟: 秒如图 所示

以上界面工作基本完成现在需要输入代码了

双击窗体进入常规 声明Public Class Form 事件中

CODE

Imports System Runtime InteropServicesImports Microsoft VisualBasicPublic Class Form _ 调用系统参数Friend Shared Function GetCurrentProcess() As IntPtrEnd Function

_Friend Shared Function OpenProcessToken(ByVal h As IntPtr

ByVal acc As Integer ByRef phtok As IntPtr) As BooleanEnd Function

_Friend Shared Function LookupPrivilegeValue(ByVal host As String

ByVal name As String ByRef pluid As Long) As BooleanEnd Function

_Friend Shared Function AdjustTokenPrivileges(ByVal htok As IntPtr

ByVal disall As Boolean ByRef newst As TokPriv Luid

ByVal len As Integer ByVal prev As IntPtr

ByVal relen As IntPtr) As BooleanEnd Function

_Friend Shared Function ExitWindowsEx(ByVal flg As Integer

ByVal rea As Integer) As BooleanEnd Function

Friend Const SE_PRIVILEGE_ENABLED As Integer = &H Friend Const TOKEN_QUERY As Integer = &H Friend Const TOKEN_ADJUST_PRIVILEGES As Integer = &H Friend Const SE_SHUTDOWN_NAME As String = SeShutdownPrivilege Friend Const EWX_LOGOFF As Integer = &H 注销计算机Friend Const EWX_SHUTDOWN As Integer = &H 关闭计算机Friend Const EWX_REBOOT As Integer = &H 重新启动计算机Friend Const EWX_FORCE As Integer = &H 关闭所有进程 注销计算机Friend Const EWX_POWEROFF As Integer = &H Friend Const EWX_FORCEIFHUNG As Integer = &H

_  引用参数 Friend Structure TokPriv Luid Public Count As Integer Public Luid As Long Public Attr As IntegerEnd Structure

Private Shared Sub DoExitWin(ByVal flg As Integer) Dim xc As Boolean 判断语句 Dim tp As TokPriv Luid Dim hproc As IntPtr = GetCurrentProcess()  调用进程值 Dim htok As IntPtr = IntPtr Zero xc = OpenProcessToken(hproc TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY htok) tp Count =tp Luid =tp Attr = SE_PRIVILEGE_ENABLED xc = LookupPrivilegeValue(Nothing SE_SHUTDOWN_NAME tp Luid) xc = AdjustTokenPrivileges(htok False tp IntPtr Zero IntPtr Zero) xc = ExitWindowsEx(flg )End Sub

Public Shared Sub Reboot() DoExitWin((EWX_FORCE Or EWX_REBOOT)) 重新启动计算机End Sub

Public Shared Sub PowerOff() DoExitWin((EWX_FORCE Or EWX_POWEROFF)) 关闭计算机End Sub

Public Shared Sub LogoOff() DoExitWin((EWX_FORCE Or EWX_LOGOFF)) 注销计算机End Sub

Dim entTime As Object 保存输入时间Dim xianzaiTime As Object 保存实时时间Dim startTime As Object 保存开始定时时间

注销button 按钮输入code

Private Sub Button _Click(ByVal sender As System Object

ByVal e As System EventArgs) Handles Button ClickLogoOff() 注销计算机End Sub

双击重新启动按钮button 输入code

Private Sub Button _Click(ByVal sender As System Object

ByVal e As System EventArgs) Handles Button Click

Reboot()

End Sub

双击关闭计算机按钮button 输入code

Private Sub Button _Click(ByVal sender As System Object

ByVal e As System EventArgs) Handles Button Click startTime = TimeOfDay If Not IsDate(TextBox Text) Then 用IsData函数判断输入的时间格式MsgBox( 你所输入的不是时间格式 ! 错误 ) ElseentTime = TimeValue(TextBox Text) End If Timer Enabled = True  启动定时器 Me WindowState = System Windows Forms FormWindowState Minimized  最小化窗体

End Sub

如图

双击timer 控件如图

输入代码

Private Sub Timer _Tick(ByVal sender As System Object

ByVal e As System EventArgs) Handles Timer Tick xianzaiTime = TimeOfDay If RadioButton Checked Then

If DateDiff(Microsoft VisualBasic DateInterval Second

xianzaiTime entTime) < Then 用DateDiff函数判断是否到时间了

End IfEnd If

PowerOff() 关闭计算机End Sub

好了 基本上一个定时关机程序就完成了 接下来加一个超级链接吧!当然对于高手来说可能是废话 但是对于新手来说这也是必备的 这个超级链接当然是我们最喜欢的天极网开发频道了

先创建一个Label控件吧 把它托到窗体上 将text属性设置为天极网开发频道如图

接下来需要输入代码了 双击窗体Form

进入Public Class Form 事件

代码

Private Declare Function ShellExecute Lib shell dll

Alias ShellExecuteA (ByVal hwngnd As Integer

ByVal lpOperation As String ByVal lpFile As String

ByVal lpParameters As String ByVal lpDirectory As String

ByVal nShowCmd As Integer) As Integer

如图

双击刚才添加的label属性text:(天极网开发频道)中输入以下代码

Private Sub Label _Click(ByVal sender As System Object

ByVal e As System EventArgs) Handles Label ClickShellExecute( open CStr( ) CStr( ) )

End SubEnd Class

OK!全部搞定 按F 键运行如图 所示 选择相应选项后点击(关闭计算机启动定时器按钮)就可以了 现在程序将按照你所设定的时间而启动关闭计算机选项

lishixinzhi/Article/program/net/201311/12366

微信可以利用蜗牛传书小程序给好友定时发信息;方法是;以苹果手机 *** 作为例:

第一步:点击“小程序”,如下图所示。

第二步:键入“蜗牛传书”并点击“搜索”,如下图所示。

第三步:点击“蜗牛传书”小程序,如下图所示。

第四步:点击“创建”,如下图所示。

第五步:键入要发的信息标题、发送的日期和信息内容并点击保存,如下图所示。

第六步:点击“发送”,如下图所示。

第七步:最后选择发送的好友并点击发送,如下图所示。这样就可以在特定时间给好友发微信信息了。

给你改了个,有空到我空间转转:

/

C51顺序控制程序:

注意:由预处理生成的定时初值有一定的局限性,调试过程中请参考计算工具得出的结果

请到我空间下载“51定时器计算器”

2009-10-02 by yingang2009

/

#include<reg51h>

//

#define Byte unsigned char

#define Word unsigned int

#define DWord unsigned long

//

#define Speed 12 //12 MHz(注意更高就不能一次得到50ms定时了)

#define TTTT 50000 //50ms

#define TH1_Init_Val (65536-Speed TTTT / 12)/256

#define TL1_Init_Val (65536-Speed TTTT / 12)%256

sbit L1 = P1^0 ;

sbit L2 = P1^1 ;

sbit L3 = P1^2 ;

sbit L4 = P1^3 ;

sbit L5 = P1^4 ;

sbit L6 = P1^5 ;

sbit L7 = P1^6 ;

sbit L8 = P1^7 ;

//模块变量

bit flag1s ;

//T1初始化

void T1_Init()

{

TMOD= 0x11;

TH1=TH1_Init_Val ;

TL1=TL1_Init_Val ;

ET1 =1;

EA =1;

TR1 =1;

}

/LED主进程

第一秒钟L1,L3亮,

第二秒钟L2,L4亮,

第三秒钟L5,L7亮,

第四秒钟L6,L8亮,

第六秒钟L2,L4,L6,L8亮,

第七秒钟八个二极管全亮,

第八秒钟全灭

[可以将P0口各时刻的状态做个表格,这里就不做了]

/

void Led_Run()

{

static Byte step;

if (!flag1s)return; //接收定时器“flag1s”消息,没到1s返回

flag1s = 0; //1s到则开始工作

step++;

switch(step) //以1s为间隔进行顺序控制

{

case 1:

P1 =0xff; //先熄灭

L1 = 0;

L3 = 0;

break;

case 2:

P1 =0xff; //先熄灭

L2 = 0;

L4 = 0;

break;

case 3:

P1 =0xff; //先熄灭

L5 = 0;

L7 = 0;

break;

case 4:

P1 =0xff; //先熄灭

L6 = 0;

L8 = 0;

break;

case 5:

//do nothing 维持第4秒内容

break;

case 6:

P1 =0xff; //先熄灭

L2 = 0;

L4 = 0;

L6 = 0;

L8 = 0;

break;

case 7:

P1 = 0x00; //全亮

break;

case 8:

P1 =0xff; //全灭

step = 0; //步骤复位

break;

default:

step = 0; //具有一定的抗干扰意义

break;

}

}

//主程序

void main()

{

T1_Init();

while(1)

{

Led_Run();

}

}

void ISR_T1() interrupt 3 using 2 //定时器1中断服务程序50ms

{

static Byte cnt1s;

TH1=TH1_Init_Val ;

TL1=TL1_Init_Val ; //reload val

if (++cnt1s >= 20)

{

cnt1s = 0;

flag1s = 1;

}

}

多简单的事啊,我贴一个AVR采用定时器0计时的,你参考一下吧。

#pragma interrupt_handler timer0_ovf_isr:10 //TIMER0 定时2ms中断

void timer0_ovf_isr(void)

{

TCNT0 = 0xD9; //reload counter value

timer2ms++;

if(timer2ms >= 5)

{

timer2ms = 0;

timer10ms ++;

systimer10ms ++;

if(systimer10ms >= 22) //内部1M晶振

{

systimer10ms = 0;

timer1s ++;

}

}

也就是说。你另外起一个变量。与响应时间对照。你别说9999分钟。你就是9999年都可以做到。不理解时加我QQ问我吧。

以上就是关于51单片机定时器汇编程序全部的内容,包括:51单片机定时器汇编程序、如何让自己写的程序每天定时运行、VB.NET 2005编写定时关机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9873225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存