⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //******************************************************************************
(0008) 
(0009) #include "app.h"
(0010) 
(0011) //Task Control Block structure
(0012) typedef struct
(0013) {
(0014) 	INT16U wTimerPeriod;
(0015) 	INT16U wTimerCount;
(0016) 	INT16U wEvent;
(0017) }OS_TCB;
(0018) 
(0019) //structure array definition
(0020) OS_TCB OSTCB[cMaxTask];
(0021) 
(0022) //******************************************************************************
(0023) // Function    : OS_Event_Pend
(0024) // Input       : wTaskPrio - priority of task
(0025) // Output      : event of task
(0026) // Description : Inquiry event of task indexed by priority and then clear it
(0027) //******************************************************************************
(0028) INT16U OS_Event_Pend(INT8U bTaskPrio)
(0029) {
(0030) 	INT16U wTaskEvent;
(0031) 	wTaskEvent = OSTCB[bTaskPrio].wEvent;
    06B2 E086      LDI	R24,6
    06B3 9F80      MUL	R24,R16
    06B4 01F0      MOVW	R30,R0
    06B5 E184      LDI	R24,0x14
    06B6 E091      LDI	R25,1
    06B7 0FE8      ADD	R30,R24
    06B8 1FF9      ADC	R31,R25
    06B9 8140      LDD	R20,Z+0
    06BA 8151      LDD	R21,Z+1
(0032) 	OSTCB[bTaskPrio].wEvent &= ~wTaskEvent;
    06BB E086      LDI	R24,6
    06BC 9F80      MUL	R24,R16
    06BD 0110      MOVW	R2,R0
    06BE E184      LDI	R24,0x14
    06BF E091      LDI	R25,1
    06C0 0E28      ADD	R2,R24
    06C1 1E39      ADC	R3,R25
    06C2 012A      MOVW	R4,R20
    06C3 9440      COM	R4
    06C4 9450      COM	R5
    06C5 01F1      MOVW	R30,R2
    06C6 8060      LDD	R6,Z+0
    06C7 8071      LDD	R7,Z+1
    06C8 2064      AND	R6,R4
    06C9 2075      AND	R7,R5
    06CA 8271      STD	Z+1,R7
    06CB 8260      STD	Z+0,R6
(0033) 	return(wTaskEvent);
    06CC 018A      MOVW	R16,R20
    06CD 940E0E4C  CALL	pop_gset1
    06CF 9508      RET
_OS_Event_Post:
  wTaskEvent           --> R20
  bTaskPrio            --> R22
    06D0 940E0E60  CALL	push_gset2
    06D2 01A9      MOVW	R20,R18
    06D3 2F60      MOV	R22,R16
(0034) }
(0035) 
(0036) //******************************************************************************
(0037) // Function    : OSEventSend
(0038) // Input       : wTaskPrio - priority of task
(0039) //               wTaskEvent - event to be sent                 
(0040) // Output      : none
(0041) // Description : Send an event to task indexed by priority
(0042) //******************************************************************************
(0043) void OS_Event_Post(INT8U bTaskPrio,INT16U wTaskEvent)
(0044) {
(0045) 	OSTCB[bTaskPrio].wEvent |= (1 << wTaskEvent);
    06D4 E086      LDI	R24,6
    06D5 9F86      MUL	R24,R22
    06D6 0110      MOVW	R2,R0
    06D7 E184      LDI	R24,0x14
    06D8 E091      LDI	R25,1
    06D9 0E28      ADD	R2,R24
    06DA 1E39      ADC	R3,R25
    06DB E001      LDI	R16,1
    06DC E010      LDI	R17,0
    06DD 019A      MOVW	R18,R20
    06DE 940E0EA7  CALL	lsl16
    06E0 01F1      MOVW	R30,R2
    06E1 8040      LDD	R4,Z+0
    06E2 8051      LDD	R5,Z+1
    06E3 2A40      OR	R4,R16
    06E4 2A51      OR	R5,R17
    06E5 8251      STD	Z+1,R5
    06E6 8240      STD	Z+0,R4
(0046) }
    06E7 940E0E40  CALL	pop_gset2
    06E9 9508      RET
(0047) 
(0048) //******************************************************************************
(0049) // Function    : OS_Task_Create
(0050) // Input       : wTaskPrio - priority of task
(0051) //               wTimerPeriod - period of task
(0052) // Output      : none
(0053) // Description : Set time period of a task to create it
(0054) //******************************************************************************
(0055) void OS_Task_Create(INT8U bTaskPrio,INT16U wTimerPeriod)
(0056) {
(0057) 	OSTCB[bTaskPrio].wTimerPeriod = wTimerPeriod;
_OS_Task_Create:
  wTimerPeriod         --> R18
  bTaskPrio            --> R16
    06EA E086      LDI	R24,6
    06EB 9F80      MUL	R24,R16
    06EC 01F0      MOVW	R30,R0
    06ED E180      LDI	R24,0x10
    06EE E091      LDI	R25,1
    06EF 0FE8      ADD	R30,R24
    06F0 1FF9      ADC	R31,R25
    06F1 8331      STD	Z+1,R19
    06F2 8320      STD	Z+0,R18
(0058) }
    06F3 9508      RET
(0059) 
(0060) //******************************************************************************
(0061) // Function    : OS_Task_Start
(0062) // Input       : wTaskPrio - priority of task
(0063) //               wTimerCount - Initial time count of a task
(0064) // Output      : none
(0065) // Description : Set initial time count of a task
(0066) //******************************************************************************
(0067) void OS_Task_Init(INT8U bTaskPrio,INT16U wTimerCount)
(0068) {
(0069) 	OSTCB[bTaskPrio].wTimerCount = wTimerCount;
_OS_Task_Init:
  wTimerCount          --> R18
  bTaskPrio            --> R16
    06F4 E086      LDI	R24,6
    06F5 9F80      MUL	R24,R16
    06F6 01F0      MOVW	R30,R0
    06F7 E182      LDI	R24,0x12
    06F8 E091      LDI	R25,1
    06F9 0FE8      ADD	R30,R24
    06FA 1FF9      ADC	R31,R25
    06FB 8331      STD	Z+1,R19
    06FC 8320      STD	Z+0,R18
(0070) }
    06FD 9508      RET
_OS_Task_Switch:
  bTemp                --> R20
  bTaskPrio            --> R16
    06FE 940E0E49  CALL	push_gset1
(0071) 
(0072) //******************************************************************************
(0073) // Function    : OS_Task_Switch
(0074) // Input       : wTaskPrio - priority of task
(0075) // Output      : none
(0076) // Description : inquiry the task in ready status.if there's no ready task with
(0077) //               priority higher than current one,the task would run
(0078) //******************************************************************************
(0079) INT16U OS_Task_Switch(INT8U bTaskPrio)
(0080) {
(0081) 	INT8U bTemp;
(0082) 	for(bTemp = 0;bTemp < bTaskPrio;bTemp++)
    0700 2744      CLR	R20
    0701 C011      RJMP	0x0713
(0083) 	{
(0084) 		if(OSTCB[bTemp].wEvent != 0)
    0702 E086      LDI	R24,6
    0703 9F84      MUL	R24,R20
    0704 01F0      MOVW	R30,R0
    0705 E184      LDI	R24,0x14
    0706 E091      LDI	R25,1
    0707 0FE8      ADD	R30,R24
    0708 1FF9      ADC	R31,R25
    0709 8020      LDD	R2,Z+0
    070A 8031      LDD	R3,Z+1
    070B 2022      TST	R2
    070C F411      BNE	0x070F
    070D 2033      TST	R3
    070E F019      BEQ	0x0712
(0085) 		{
(0086) 			return(true);
    070F E001      LDI	R16,1
    0710 E010      LDI	R17,0
    0711 C005      RJMP	0x0717
    0712 9543      INC	R20
    0713 1740      CP	R20,R16
    0714 F368      BCS	0x0702
(0087) 		}
(0088) 	}
(0089) 	return(false);
    0715 2700      CLR	R16
    0716 2711      CLR	R17
    0717 940E0E4C  CALL	pop_gset1
    0719 9508      RET
_OS_Task_Update:
  bTemp                --> R20
    071A 940E0E49  CALL	push_gset1
(0090) }
(0091) 
(0092) //******************************************************************************
(0093) // Function    : OS_Task_Update
(0094) // Input       : none
(0095) // Output      : none
(0096) // Description : increase timercount of all tasks in each SYS clock ISR.if task
(0097) //               is timeout,Kernel send a timer event to the task
(0098) //******************************************************************************
(0099) void OS_Task_Update(void)
(0100) {
(0101) 	INT8U bTemp;
(0102) 	for(bTemp = 0;bTemp < cMaxTask;bTemp++)
    071C 2744      CLR	R20
    071D C030      RJMP	0x074E
(0103) 	{
(0104) 		OSTCB[bTemp].wTimerCount++;
    071E E086      LDI	R24,6
    071F 9F84      MUL	R24,R20
    0720 0110      MOVW	R2,R0
    0721 E182      LDI	R24,0x12
    0722 E091      LDI	R25,1
    0723 0E28      ADD	R2,R24
    0724 1E39      ADC	R3,R25
    0725 01F1      MOVW	R30,R2
    0726 8180      LDD	R24,Z+0
    0727 8191      LDD	R25,Z+1
    0728 9601      ADIW	R24,1
    0729 8391      STD	Z+1,R25
    072A 8380      STD	Z+0,R24
(0105) 		if(OSTCB[bTemp].wTimerCount == OSTCB[bTemp].wTimerPeriod)
    072B E086      LDI	R24,6
    072C 9F84      MUL	R24,R20
    072D E180      LDI	R24,0x10
    072E E091      LDI	R25,1
    072F 01F0      MOVW	R30,R0
    0730 0FE8      ADD	R30,R24
    0731 1FF9      ADC	R31,R25
    0732 8020      LDD	R2,Z+0
    0733 8031      LDD	R3,Z+1
    0734 E182      LDI	R24,0x12
    0735 E091      LDI	R25,1
    0736 01F0      MOVW	R30,R0
    0737 0FE8      ADD	R30,R24
    0738 1FF9      ADC	R31,R25
    0739 8040      LDD	R4,Z+0
    073A 8051      LDD	R5,Z+1
    073B 1442      CP	R4,R2
    073C 0453      CPC	R5,R3
    073D F479      BNE	0x074D
(0106) 		{
(0107) 			OSTCB[bTemp].wTimerCount = 0;
    073E E086      LDI	R24,6
    073F 9F84      MUL	R24,R20
    0740 01F0      MOVW	R30,R0
    0741 E182      LDI	R24,0x12
    0742 E091      LDI	R25,1
    0743 0FE8      ADD	R30,R24
    0744 1FF9      ADC	R31,R25
    0745 2422      CLR	R2
    0746 2433      CLR	R3
    0747 8231      STD	Z+1,R3
    0748 8220      STD	Z+0,R2
(0108) 			OS_Event_Post(bTemp,0);
    0749 2722      CLR	R18
    074A 2733      CLR	R19
    074B 2F04      MOV	R16,R20
    074C DF83      RCALL	_OS_Event_Post
    074D 9543      INC	R20
    074E 3042      CPI	R20,2
    074F F408      BCC	0x0751
    0750 CFCD      RJMP	0x071E
(0109) 		}
(0110) 	}
(0111) }
    0751 940E0E4C  CALL	pop_gset1
    0753 9508      RET
(0112) 
(0113) //******************************************************************************
(0114) // Function    : OS_Init
(0115) // Input       : none
(0116) // Output      : none
(0117) // Description : Initlization of TCBs
(0118) //******************************************************************************
(0119) void OS_Init(void)
(0120) {
(0121) 	INT8U bTemp;
(0122) 	for(bTemp = 0;bTemp < cMaxTask;bTemp++)
_OS_Init:
  bTemp                --> R16
    0754 2700      CLR	R16
    0755 C01E      RJMP	0x0774
(0123) 	{
(0124) 		OSTCB[bTemp].wTimerPeriod = 0;
    0756 E086      LDI	R24,6
    0757 9F80      MUL	R24,R16
    0758 01F0      MOVW	R30,R0
    0759 E180      LDI	R24,0x10
    075A E091      LDI	R25,1
    075B 0FE8      ADD	R30,R24
    075C 1FF9      ADC	R31,R25
    075D 2422      CLR	R2
    075E 2433      CLR	R3
    075F 8231      STD	Z+1,R3
    0760 8220      STD	Z+0,R2
(0125) 		OSTCB[bTemp].wTimerCount = 0;
    0761 E086      LDI	R24,6
    0762 9F80      MUL	R24,R16
    0763 01F0      MOVW	R30,R0
    0764 E182      LDI	R24,0x12
    0765 E091      LDI	R25,1
    0766 0FE8      ADD	R30,R24
    0767 1FF9      ADC	R31,R25
    0768 8231      STD	Z+1,R3
    0769 8220      STD	Z+0,R2
(0126) 		OSTCB[bTemp].wEvent = 0;
    076A E086      LDI	R24,6
    076B 9F80      MUL	R24,R16
    076C 01F0      MOVW	R30,R0
    076D E184      LDI	R24,0x14
    076E E091      LDI	R25,1
    076F 0FE8      ADD	R30,R24
    0770 1FF9      ADC	R31,R25
    0771 8231      STD	Z+1,R3
    0772 8220      STD	Z+0,R2
    0773 9503      INC	R16
    0774 3002      CPI	R16,2
    0775 F300      BCS	0x0756
(0127) 	}
(0128) }
    0776 9508      RET
(0129) 
(0130) //******************************************************************************
(0131) // Function    : OS_Start
(0132) // Input       : none
(0133) // Output      : none
(0134) // Description : Initlization of tasks and Start Kernel
(0135) //******************************************************************************
(0136) void OS_Start(void)
(0137) {
(0138) 	Task_Init();
_OS_Start:
    0777 940E0DF0  CALL	_Task_Init
(0139) 	Task_Start();
(0140) }
    0779 940C0DF2  JMP	_Task_Start
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
(0001) //******************************************************************************
(0002) // File Name : LCD.c
(0003) // Author    : Steaven
(0004) // Created   : 2008-07-27
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //******************************************************************************
(0008) 
(0009) //PIN DESCRIPTION
(0010) //01  2   3  4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
(0011) //GND VCC V0 RS  RW  EN  D0  D1  D2  D3  D4  D5  D6  D7  CS1 CS2 RST VEE BLA BLK
(0012) //GND +5V V0 PB0 PB1 PB2 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC6 PC5 PC7 VEE +5V GND
(0013) 
(0014) #include "app.h" 
(0015) 
(0016) //constant definition
(0017) #define cLCD_X_MAX   64
(0018) #define cLCD_Y_MAX  128
(0019) 
(0020) //variable defintion
(0021) INT16U wDataBaseLength; //database length
(0022) 
(0023) //local functions declaration
(0024) void Set_DI(INT8U RS);
(0025) void Set_RW(INT8U RW);
(0026) void Set_EN(INT8U EN);
(0027) void Set_CS1(INT8U CS1);
(0028) void Set_CS2(INT8U CS2);
(0029) void Set_RST(INT8U RST);
(0030) void Set_Data(INT8U data);
(0031) 
(0032) //******************************************************************************
(0033) // Function    : Set_RS
(0034) // Input       : RS - RS Control Line Level
(0035) // Output      : none
(0036) // Description : LCD(1602) Low Level Interface Function
(0037) //******************************************************************************
(0038) void Set_DI(INT8U RS)
(0039) {
(0040) 	if(RS == 0)
_Set_DI:
  RS                   --> R16
    077B 2300      TST	R16
    077C F411      BNE	0x077F
(0041) 	{
(0042) 		PORTB &= ~0x01;
    077D 98C0      CBI	0x18,0
(0043) 	}
    077E C001      RJMP	0x0780
(0044) 	else
(0045) 	{
(0046) 		PORTB |= 0x01;
    077F 9AC0      SBI	0x18,0
(0047) 	}
(0048) }
    0780 9508      RET
(0049) 
(0050) //******************************************************************************
(0051) // Function    : Set_RW
(0052) // Input       : RW - RW Control Line Level
(0053) // Output      : none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -