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

📄 sam2_m.l

📁 用SAM72N9写的电子秤文档
💻 L
📖 第 1 页 / 共 5 页
字号:
  475                    
  476  0078   00 0F      RRET_HLEA	TJP	RETHLEA
  477  007A   00 12      RRET_WXHLEA	TJP	RETWXHLEA
  478  007C   00 16      RRET_YZWXHLEA	TJP	RETYZWXHLEA
  479  007E   00 0C      RIRET_SB	TJP	IRETSB
  480                    
  481                    ;----------------------------------------------------------------------------
  482                    ;
  483  0080              	.origin	Main2Loop
  484                    
  485                    ;----------------------------------------------------------------------------
  486                    ;	F: On/Zero Button(MaB)
  487                    ;	I: WeightTareNow
  488                    ;	O: WeightTareNow
  489                    ;	N: Rising edge when release key(MaB)
  490                    ;	   When enter INT1_Int, IS0, IS1 = 1, 0
  491                    ;
  492  0080              INT1_Int
  493  0080   FE AE              BITR    IRQ1            ;
  494  0082   FE A0              BITR    IS0             ;        
  495  0084   73         	REF	RPush_SB	;
  496  0085   20         	REF	RSMB_Variable	;
  497  0086   E2 22      	BTSF	CalibrateOn	;
  498  0088   E0 21      	BITR	CntDspNow	;
  499                    ;	REF	RSMB_MemMapIO	;
  500                    ;INT1_Int1
  501                    ;	BTST    ONZERO_PIN
  502                    ;        JR      INT1_Int1
  503                    ;	REF	RSMB_Variable	;	
  504  008A   F1 21      	BITS	WeightTareNow	; Set flag to weight tare	
  505  008C   77         	REF	RIRET_SB	;
  506                    
  507                    ;----------------------------------------------------------------------------
  508                    ;	F: INTB Interrupt for Basic Timer Overflow
  509                    ;	N: Interrupt interval = 2.2886.ms
  510                    ;	   when enter into INTB_Int, IS0, IS1 = 1, 0
  511  008D              INTB_Int
  512  008D   FE 88              BITR    IRQB            ;
  513  008F   FE A0              BITR    IS0             ;
  514                    
  515  0091   73         	REF	RPush_SB	;
  516  0092   DD 53      	SRB	RegisterINTB	;
  517  0094   20         	REF	RSMB_Variable	;
  518                    
  519  0095   E2 22      	BTSF	CalibrateOn	; If Calibrate On, skip sleep time
  520  0097   90 D2      	JPS	INTB_Int0_2	; & Timer counting
  521                    
  522  0099   CE 36      	LD	EA,BCNT_1s_M	;
  523  009B   C9 01      	ADS	EA,#1		;
  524  009D   90 D0      	JPS	INTB_Int0_1	;
  525  009F   CA 35      	INCS	BCNT_1s_H	; never skip
  526  00A1   C2 35      	BTSF	BCNT_1s_H.0	;
  527  00A3   90 D0      	JPS	INTB_Int0_1	;
  528  00A5              INTB_1000ms
  529                    
  530  00A5   D3 7F      	BTST	HoldRd		; Check for hold reading in progress
  531  00A7   1C         	JR	INTB_IntA	;
  532                    
  533  00A8   CA 3F      	INCS	HoldTimer	; Check hold reading timeout
  534  00AA   19         	JR	INTB_IntA	;
  535  00AB   D0 7F      	BITR	HoldRd		; 
  536  00AD   C0 7F      	BITR	HoldStableChk	;
  537  00AF   F1 7F      	BITS	HoldNotAllow	; Hold is not allow unless reading change
  538  00B1   BC         	LD	A,#HoldChkTime	; Reset timer
  539  00B2   89 3F      	LD	HoldTimer,A	;
  540  00B4              INTB_IntA
  541  00B4              INTB_IntB
  542  00B4   E2 25      	BTSF	AutoOffEn	; Chk Auto-power off enabled or not
  543  00B6   90 CB      	JPS	INTB_IntC	; if not, jump
  544  00B8   C2 22      	BTSF	Chge4stepNow	; Chk 4 step changing
  545  00BA   90 CB      	JPS	INTB_IntC	; if change, jump
  546  00BC   C2 24      	BTSF	SleepNow	; Goto Sleep if timeout
  547  00BE   91 12      	JPS	Sleep1		;
  548  00C0   CA 3C      	INCS	SleepTimL	;
  549  00C2   18         	JR	INTB_IntC	;
  550  00C3   CA 3D      	INCS	SleepTimL+1	;
  551  00C5   15         	JR	INTB_IntC	
  552  00C6   CA 3E      	INCS	SleepTimH	;
  553  00C8   12         	JR	INTB_IntC	
  554  00C9   C1 24      	BITS	SleepNow	; SleepTim overflow, then set sleep flag
  555                    
  556  00CB              INTB_IntC
  557  00CB   B0         	LD	A,#0		;
  558  00CC   89 35      	LD	BCNT_1s_H,A	; Reload 1s timer
  559  00CE   81 4B      	LD	EA,#BCNT1s_RL&0ffh
  560  00D0              INTB_Int0_1
  561  00D0   CD 36      	LD	BCNT_1s_M,EA	;
  562                    
  563  00D2              INTB_Int0_2
  564  00D2   CA 34      	INCS	BCNT_36ms	; BCNT Count from 0 -> 15 -> 0 -> 15 ....
  565  00D4   77         	REF	RIRET_SB	;
  566  00D5              INTB_36ms
  567                    ;-----
  568  00D5              INTB_Int1_1
  569  00D5   CA 29      	INCS	BCNT_183ms	; Check 183ms interval reached?
  570  00D7   90 E7      	JPS	INTB_Int2_1	;
  571                    
  572  00D9              INTB_183ms
  573                    ; add by huang for timeout 03-10-23 12:26
  574                    ;	ld	a,TimeoutTmr
  575                    ;	ref	RCPSE_A0
  576                    ;	jr	NewInt0
  577                    ;	jr	NewInt1
  578                    ;NewInt0:
  579                    ;	decs	a
  580                    ;	ld	TimeoutTmr,a
  581  00D9              NewInt1:	
  582  00D9   BB         	LD	A,#BCNT183ms_RL	;
  583  00DA   89 29      	LD	BCNT_183ms,A	; Reload 183ms timer
  584                    
  585  00DC              INTB_Int1_2
  586  00DC   C3 25      	BTST	AutoZeroEn	; Chk Auto-revert to zero enabled or not
  587  00DE   18         	JR	INTB_Int1_3	; if not, jump
  588  00DF   E3 27      	BTST	UdrWtNow	; Is Now UnderWeight
  589  00E1   15         	JR	INTB_Int1_3	;
  590  00E2   CA 4B      	INCS	AutoZeroTim	;
  591  00E4   12         	JR	INTB_Int1_3	;
  592  00E5   D1 23      	BITS	AutoZeroNow	; Enable Reset to Zero
  593                    
  594  00E7              INTB_Int1_3
  595                    	
  596                    ;	LD	A,Tag2sec	;
  597                    ;	REF	RCPSE_A0	; if Tag2sec <> 0,
  598                    ;	INCS	Tag2sec		; Incs Tag2sec
  599                    ;--------------------------
  600  00E7              INTB_Int2_1
  601  00E7   CA 2A      	INCS	BCNT_500ms	; chk 512ms reached?
  602  00E9   77         	REF	RIRET_SB	;
  603                    
  604  00EA              INTB_500ms
  605  00EA   B2         	LD	A,#BCNT500ms_RL	; Reload 512ms Timer
  606  00EB   89 2A      	LD	BCNT_500ms,A	;
  607                    ;--------------------------        
  608  00ED   C3 22      	BTST	Chge4stepNow
  609  00EF   17         	JR	INTB_Int3_1
  610  00F0   CA 8A      	INCS	Chge4stepTimer
  611  00F2   14         	JR	INTB_Int3_1
  612  00F3   C0 22      	BITR	Chge4stepNow	; Set sleep timer delay end
  613  00F5   E1 2B      	BITS	ChgeSlpTmrNow
  614  00F7              INTB_Int3_1
  615  00F7   E3 24      	BTST	HoldEn		; Check for hold enable
  616  00F9   1B         	JR	INTB_Int3_2	; 
  617  00FA   D2 7F      	BTSF	HoldRd		; Check the reading is not hold
  618  00FC   18         	JR	INTB_Int3_2	;
  619  00FD   C2 7F      	BTSF	HoldStableChk	; whether the routine executed or not
  620  00FF   15         	JR	INTB_Int3_2	;
  621  0100   CA 3F      	INCS	HoldTimer	;
  622  0102   12         	JR	INTB_Int3_2	;
  623  0103   C1 7F      	BITS	HoldStableChk	; chk hold stable time interval reach
  624  0105              INTB_Int3_2
  625  0105   CA 6E              INCS    Tag2sec
  626  0107   12                 JR      INTB_Int3_3
  627  0108   C1 23              BITS	CreepZero	;	
  628                    
  629  010A              INTB_Int3_3
  630  010A   CA 79      	INCS	CreepTimer	; CREEPING TIMER
  631  010C   77         	REF	RIRET_SB	
  632  010D   D1 24      	BITS	TimrFinished	;	
  633  010F   77         	REF	RIRET_SB	;
  634                    ;----------------------------------------------------------------------------
  635                    ;
  636  0110              Sleep
  637  0110   EA E7      	CALLS	Dly20		; simlute the Buzzer tone delay
  638                    ;	REF	RKeyTone	;
  639  0112              Sleep1
  640  0112   FE B2      	DI			;
  641  0114              Sleep2
  642  0114   21         	REF	RSMB_MemMapIO	;
  643                    
  644  0115   B0         	LD	A,#0		;
  645  0116   89 B8      	LD	INTA,A		; Disable Basic Timer Interrupt(INTB)
  646  0118   89 BA      	LD	INTB,A		; Disable Watch Timer
  647  011A   89 BC      	LD	INTC,A		; Disable Timer/Counter Interrupt(INTT0)
  648  011C   89 BE      	LD	INTE,A		; Disable INT0 Pin Interrupt
  649                    				; Disable INT1 Pin Interrupt
  650  011E   89 8E      	LD	LCON,A          ; Display off
  651                    
  652  0120   22         	REF	RSMB_LCD 	; Select LCD Memory Bank1
  653  0121   C0 FA      	BITR	POWERON_PIN	; Power Off  for Chip
  654                    
  655  0123   A0         	NOP
  656  0124   0E         	JR	$-1		; Dead loop until no power supply
  657                    	
  658                    ;----------------------------------------------------------------------------
  659                    ;	F: Chk "Off" key press
  660                    ;	O: SMB = Variable Bank
  661                    ;	D: A
  662  0125              ChkOffButton
  663  0125   21         	REF	RSMB_MemMapIO	;
  664  0126   8C F6      	LD	A,KEYCOL	;
  665  0128   20         	REF	RSMB_Variable	;
  666  0129   DD 11      	AND	A,#0001b	;
  667  012B   48         	DECS	A		;
  668  012C   C5         	RET			;
  669  012D   91 10      	JPS	Sleep		; Off button
  670                    
  671                    ;----------------------------------------------------------------------------
  672                    ;	F: External INT0 pin Interrupt
  673                    ;	N: When enter INT0_Int, IS0, IS1 = 1, 0
  674  012F              INT0_Int
  675  012F   73         	REF	RPush_SB	;
  676                    
  677                    ;v***** IMPORTANT TO DO FIRST *****v
  678  0130   DD 52      	SRB	RegisterCount	;
  679  0132   21         	REF	RSMB_MemMapIO	;
  680  0133   81 70      	LD	EA,#01110000b	; Stop TCNT0
  681  0135   CD 90      	LD	TMOD0,EA	;
  682  0137   22         	REF	RSMB_LCD 	;
  683  0138   C0 FB      	BITR    DISCHARGE_PIN	;
  684                    ;^*********************************^
  685                    
  686  013A   21         	REF	RSMB_MemMapIO	;
  687  013B   CE 94      	LD	EA,TCNT0	; Load LSB
  688  013D   26         	REF     RLD_WXEA        ; Store LSB to WX
  689  013E   81 7C      	LD	EA,#01111100b	; Enable T/C0
  690  0140   CD 90      	LD	TMOD0,EA        ; clear TCNT0 & Restart
  691                    
  692  0142   20         	REF	RSMB_Variable	;
  693  0143   D0 21      	BITR	CntPeriodNow	;
  694                    
  695  0145   F9 8C      	BTST	IRQT0		;
  696  0147   15         	JR	StoreSample	;
  697  0148   86         	INCS	YZ		;
  698  0149   13         	JR	StoreSample	;
  699  014A   5A         	INCS	L		;	
  700  014B   FE 8C      	BITR	IRQT0		; Clear Timer/Counter Request Flag
  701                    	
  702  014D              StoreSample
  703  014D   2B         	PUSH	HL		;
  704  014E   83 85      	LD	HL,#HaveData	;
  705                    	
  706  0150   F4 35      	LDB	C,@H+PermitUpdate
  707  0152   D7         	BTST	C		; Chk Permit to update sample or not?
  708  0153   12         	JR	StorePermit	;
  709  0154   91 72      	JPS	INT0_Int1	;
  710  0156              StorePermit	
  711  0156   F4 25      	LDB	C,@H+UpdateSample0
  712  0158   D6         	CCF			;
  713  0159   FC 25      	LDB	@H+UpdateSample0,C
  714  015B   D7         	BTST	C		; Chk where Sample to store?
  715  015C   1B         	JR	StoreSample0	;
  716                    
  717  015D              StoreSample1

⌨️ 快捷键说明

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